基于“均态分布”随机数算法的一次性口令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;
}
基于“均态分布”随机数算法的一次性口令OneTimePassword(原创)的更多相关文章
- VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]
VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] - tingya的专栏 - 博客频道 - CSDN.NET VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] 分类 ...
- 基于MeanShift的目标跟踪算法及实现
这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法[matlab/c两个版本] csdn贴公式比较烦,原谅我直接截图了 ...
- 基于面绘制的MC算法以及基于体绘制的 Ray-casting 实现Dicom图像的三维重建(python实现)
加入实验室后,经过张老师的介绍,有幸与某公司合共共同完成某个项目,在此项目中我主要负责的是三维 pdf 报告生成.Dicom图像上亮度.对比度调整以及 Dicom图像三维重建.今天主要介绍一下完成Di ...
- 基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET
基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET 于视觉信息的网页分块算法(VIPS) 2012-07-29 15:22 1233人阅读 评论(1) ...
- 基于FPGA的腐蚀膨胀算法实现
本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做" ...
- 基于FPGA的肤色识别算法实现
大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现. 我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现. 将彩色图像转化为 ...
- 基于MATLAB的人脸识别算法的研究
基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...
- 基于RNN的音频降噪算法 (附完整C代码)
前几天无意间看到一个项目rnnoise. 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法. 采用的是 GRU/LSTM 模型. 阅读下训练代码,可 ...
- C语言生成32位和64位随机数算法
C语言生成32位和64位随机数算法 /** * randstd.h * * Standard definitions and types, Bob Jenkins * * 2015-01-19: re ...
随机推荐
- 各种类型的Dialog
下面是几种对话框的效果 图一: 图二: 图三: 图四: 图五: 图六: 图七: 图1效果:该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式. 代码: 创建对话框方法dialog ...
- Androd点击一个选框取消其他选框
说明: 我做的体温填报系统需要在填报体温时勾选有无特殊情况 当勾选'无'时需要将用户勾选的其他选框取消 当勾选其他选框时需要将'无'这个选框取消 效果: 代码: addTem.xml <Line ...
- 美团动态线程池实践思路开源项目(DynamicTp),线程池源码解析及通知告警篇
大家好,这篇文章我们来聊下动态线程池开源项目(DynamicTp)的通知告警模块.目前项目提供以下通知告警功能,每一个通知项都可以独立配置是否开启.告警阈值.告警间隔时间.平台等,具体代码请看core ...
- springboot+springsecurity+mybatis plus之用户认证
一.权限管理的概念 另一个安全框架shiro:shiro之权限管理的描述 导入常用坐标 <dependency> <groupId>org.springframework.bo ...
- Spring Boot-@ImportResource注解
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效 第一步:创建一个spring配置文件bean.xml <?xml version="1.0&quo ...
- SpringMVC获取请求参数-集合类型
1.创建User实体类 ```java public class User { private String username; private int age; public String getU ...
- Linux下编写和加载 .ko 文件(编写linux驱动)
一..ko 文件介绍 .ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载. 二.优点 (1)这样可以缩小内核体积 ...
- linux磁盘之分区类型id
我们通过命令来查看一下linux系统定义的分区类型id及其意义(更改磁盘分区类型必须掌握)系统采样: [root@fp-web-130 ~]# cat /etc/redhat-release Cent ...
- Java学习day20
一个简单的鼠标点击在窗口画点的程序 今天学习了键盘监听和Swing窗口 Swing可以理解为是AWT的升级版本,方法名字等大都相似,例如Frame和JFrame AWT如果要关闭窗口,需要使用窗口监听 ...
- 2021.05.14 tarjan
2021.05.14 tarjan 标准版tarjan 这里使用数组来模拟栈 void tarjan(int x){ ++ind; dfn[x]=low[x]=ind; stacki[++top]=x ...