基于“均态分布”随机数算法的一次性口令OneTimePassword(原创)
/* 所谓均态分布随机数算法是指:每个数(整数或实数)无序地分布在数轴上,值只出现一次永不重复。体现了香农的一次一密理论。
* 均体现在每个数的值是平均概率,即都有出现;态体现在每个数在数轴上的位置是惟一性。
* 有别于函数式伪随机数算法的缺陷:已经有文献说明,输出一亿个函数式伪随机数,就能估算它的算法了,即函数式伪随机数算法可以被破解。
* 均态分布随机数算法分为真均态分布随机数算法和伪均态分布随机数算法。
* 真均态分布随机数算法是一种接近自然随机数的算法,没有文献说明能被破解,即不可破解。因为数轴是无穷大的,根本不能出现重复的值,亦即不可循环。
* 伪均态分布随机数算法是有限的,值会重复,亦即会循环。那么就有可能被破解,只是暂时没有找到破解算法。
* 本程序算法是基于伪均态分布随机数算法,是本人原创首创独创。既可以用于SSH作为登入口令,又可以作加解密算法。
*/
// 在 X86_32/X86_64 平台上的 Windows 用 DevCPP 编译通过,在 X86_32/X86_64 平台上的 Linux、*BSD、MacOS 用 gcc 编译通过。
// 用法:(Windows)OneTimePassword password 或(Linux、*BSD、MacOS)./OneTimePassword password
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define AMOUNT 64
int main(int argc, char *argv[])
{
// 95+1个可打印字符密码本
unsigned char aucKeyTable[96];
// 这个字符任意
aucKeyTable[95] = 36;
srand((unsigned int)time(NULL));
// 用函数式伪随机数算法初始化密码本
for(unsigned long long i = 0; i < 95; ++i)
{
LOOP:
aucKeyTable[i] = 32 + rand() % 95;
for(unsigned long long j = 0; j < i; ++j)
{
if(aucKeyTable[j] == aucKeyTable[i]) goto LOOP;
}
}
unsigned long long ulPasswordLength = -1;
// 口令任意长度,从一到无穷大均可。
while(argv[1][++ulPasswordLength]);
for(unsigned long long i = 1; i <= AMOUNT; ++i)
{
// 生成口令
for(unsigned long long j = 0; argv[1][j]; ++j) argv[1][j] = aucKeyTable[argv[1][j] % 96];
printf("One Time Password(%llu)\t%s\n", i, argv[1]);
// 伪均态随机数算法,这个就是算法的核心。
for(unsigned long long k = 0; k < 12; ++k)
{
unsigned long long ulKeyIndex, ulKeyTemp, *pulKeySwap1 = (unsigned long long*)aucKeyTable, *pulKeySwap2 = (unsigned long long*)aucKeyTable;
if(i & 1) ulKeyIndex = argv[1][k % ulPasswordLength] % 12;
else ulKeyIndex = rand() % 12;
ulKeyTemp = pulKeySwap1[k];
pulKeySwap1[k] = pulKeySwap2[ulKeyIndex];
pulKeySwap2[ulKeyIndex] = ulKeyTemp;
}
}
return 0;
}
最新文章
- javascript如何设置DIV背景色为随机色
- 烂泥:学习ssh之ssh密钥随身携带
- windows系统查看80端口被占用的程序并结束该程序运行
- Qt信号与槽应用实例一
- 在后台 .cs 中执行前台的js 函数
- android apk--程序发布前的准备
- hud 2502 月之数
- http://blog.sina.com.cn/s/blog_6940cab30101hn9j.html
- MySQL源码 数据结构hash
- html打开个人QQ聊天页面
- SICP 习题 (1.9) 解题总结
- [补档][Poi2010]Monotonicity 2
- 为UWP应用开启回环访问权限
- TypeError: can only concatenate str (not ";int";) to str解决方式
- 洛谷P2375 动物园
- CentOS下安装Vmtools
- IIS Web 服务器/ASP.NET 运行原理基本知识概念整理 转
- 解决Eclipse中文乱码的问题
- 切线空间(Tangent Space)
- 基于zookeeper实现高性能分布式锁
热门文章
- Windows测试Hadoop报错解决
- Input框搜索关键字高亮显示
- Ubuntu安装docker-compose(摘自官网,自用)
- 编译实战 | 手摸手教你在Windows环境下运行Redis6.x
- Angular项目构建指南 - 不再为angular构建而犹豫不决(转)
- 数据建模软件Chiner,颜值与实用性并存
- .NET宝藏API之:OutputFormatter,格式化输出对象
- Luffy /4/ 多方式登录接口&;登录注册前端页面
- 简单几步解决ie打不开闪退的问题 亲测有效
- ABP应用开发(Step by Step)-下篇