/* 所谓均态分布随机数算法是指:每个数(整数或实数)无序地分布在数轴上,值只出现一次永不重复。体现了香农的一次一密理论。
* 均体现在每个数的值是平均概率,即都有出现;态体现在每个数在数轴上的位置是惟一性。
* 有别于函数式伪随机数算法的缺陷:已经有文献说明,输出一亿个函数式伪随机数,就能估算它的算法了,即函数式伪随机数算法可以被破解。
* 均态分布随机数算法分为真均态分布随机数算法和伪均态分布随机数算法。
* 真均态分布随机数算法是一种接近自然随机数的算法,没有文献说明能被破解,即不可破解。因为数轴是无穷大的,根本不能出现重复的值,亦即不可循环。
* 伪均态分布随机数算法是有限的,值会重复,亦即会循环。那么就有可能被破解,只是暂时没有找到破解算法。
* 本程序算法是基于伪均态分布随机数算法,是本人原创首创独创。既可以用于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(原创)的更多相关文章

  1. VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]

    VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] - tingya的专栏 - 博客频道 - CSDN.NET VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法] 分类 ...

  2. 基于MeanShift的目标跟踪算法及实现

    这次将介绍基于MeanShift的目标跟踪算法,首先谈谈简介,然后给出算法实现流程,最后实现了一个单目标跟踪的MeanShift算法[matlab/c两个版本] csdn贴公式比较烦,原谅我直接截图了 ...

  3. 基于面绘制的MC算法以及基于体绘制的 Ray-casting 实现Dicom图像的三维重建(python实现)

    加入实验室后,经过张老师的介绍,有幸与某公司合共共同完成某个项目,在此项目中我主要负责的是三维 pdf 报告生成.Dicom图像上亮度.对比度调整以及 Dicom图像三维重建.今天主要介绍一下完成Di ...

  4. 基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET

    基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET 于视觉信息的网页分块算法(VIPS) 2012-07-29 15:22 1233人阅读 评论(1) ...

  5. 基于FPGA的腐蚀膨胀算法实现

    本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做" ...

  6. 基于FPGA的肤色识别算法实现

    大家好,给大家介绍一下,这是基于FPGA的肤色识别算法实现. 我们今天这篇文章有两个内容一是实现基于FPGA的彩色图片转灰度实现,然后在这个基础上实现基于FPGA的肤色检测算法实现. 将彩色图像转化为 ...

  7. 基于MATLAB的人脸识别算法的研究

    基于MATLAB的人脸识别算法的研究 作者:lee神 现如今机器视觉越来越盛行,从智能交通系统的车辆识别,车牌识别到交通标牌的识别:从智能手机的人脸识别的性别识别:如今无人驾驶汽车更是应用了大量的机器 ...

  8. 基于RNN的音频降噪算法 (附完整C代码)

    前几天无意间看到一个项目rnnoise. 项目地址: https://github.com/xiph/rnnoise 基于RNN的音频降噪算法. 采用的是 GRU/LSTM 模型. 阅读下训练代码,可 ...

  9. C语言生成32位和64位随机数算法

    C语言生成32位和64位随机数算法 /** * randstd.h * * Standard definitions and types, Bob Jenkins * * 2015-01-19: re ...

随机推荐

  1. Native方法的使用

    Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能. 可以将 ...

  2. eclipse/myeclipse注释模板的修改

    本文转自:http://kaminlee.iteye.com/blog/1101938 Window --> Java --> Code Style --> Code Templat ...

  3. vue引入swiper

    https://github.com/surmon-china/vue-awesome-swiper/blob/master/examples/03-pagination.vue https://su ...

  4. DRF-认证权限频率

    目录 DRF-认证权限频率 认证 登录接口 认证 权限 作用 使用 频率 作用 使用 认证权限频率+五个接口 模型 视图 序列化器 认证权限频率类 配置文件 路由 DRF-认证权限频率 前后端混合开发 ...

  5. Spring MVC 工作原理和流程、注解

    Spring MVC 是实现MVC设计模式的企业级开发框架,是Spring框架的一个子模块,无需整合,开发起来更加便捷. MVC设计模式 MVC是一种设计模式,它将应用程序分为 Controller. ...

  6. Hyperledger Fabric定制联盟链网络工程实践

    总体来看,网络上成体系的可用的 Fabric 教程极少--不是直接在 Fabric 官网复制内容大谈基础理论就是在描述一个几乎无法复现的项目实践,以至于学习 Fabric 的效率极低,印象最深刻的就是 ...

  7. C# 静态常量(const)动态常量(static、readonly)用法区别

    C# 常量的命名方法 一个低级错误 readonly.const 代码 使用方式 支持类型 维护性 性能比较 优先使用 C# Static 与 Java Static C# Const 与 Java ...

  8. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  9. HbuilderX失焦时自动保存编辑器内容

    hbuilderX 有一个非常好用的功能:就是自动保存. 而且不需要安装什么插件,只需要在编辑器设置就可以了.接下来我们一起来设置吧: 1.打开我们的hbuilderX编辑器.在最上排选项栏里打开 & ...

  10. python3-认识内置对象,运算符,表达式

    1 . 认识内置对象 在python中一切皆对象, 整数,实数,复数,字符串,列表,元组,字典,集合,zip,  map, enumerate, filter , 函数 ,类 , 分类:内置对象,标准 ...