• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程技巧 > 生成密码算法

生成密码算法

作者:lindexi_gd的专栏 字体:[增加 减小] 来源:互联网 时间:2017-07-22

lindexi_gd的专栏通过本文主要向大家介绍了博客,密码,算法,生成密码算法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

现在好多人不想在每个网站都使用相同密码,他们又无法记住所有网站的密码。

本文提供一个简单的方式让大家可以轻松记住一个账户和密码,来得到对每个不同的网站有一个对应的密码。

本文还发在我自己搭建的博客: 生成密码,因为csdn的文章更新没有自己博客简单,所以如果想看更新的文章,请到我的博客去看。

当然自己的博客是放草稿的,如果文章写好了,我才发到csdn

 </div>

这是一个生成密码算法。

首先是要求用户输入他要记住的账号和密码。

然后用户对他每个需要生成密码的网站,在程序输入域名。

接着就是选择生成的密码,有需要位数N,一般是6,8,10,16的长度。

然后就可以生成一段对应的密码。

生成密码的要求,就是用户需要密码包括的字符,一般有需要大写、需要小写、需要数字、需要特殊,我们把用于选择需要生成类型数记为n。也就是用户如果要求有英文大小写和数值,那么n=3。n用于生成密码中间变量,可以得到所有用户要求。

对于不同的域名可以生成不同的密码,除了域名,还可以使用其它的字符。那么算法的要求是对于不同的输入,很少会生成相同的密码。对于相同的输入,生成相同密码。

于是用户需要记住的就是他的账号密码,遇到了在网站输入,就输入网站,于是得到网站密码,这样可以让用户只记住一个账号就可以。

算法也比较简单,实现有点复杂。

算法:

可以分为3步,第一步是生成组合字符,第二步进行混淆,第三步生成密码。

第一步的作用是生成作为密码的字符,第二步是防止第一步密码过于简单,防止可以从生成密码计算出用户账号密码,第三步是核心,用于生成密码。

  1. 生成组合字符

第一步需要先计算中间的值,计算方法:

x=md5(账号+域名)

x1=md5(密码+域名)

x2=md5(账号+密码+域名)

根据生成的中间值,可以计算出字符串s作为密码的生成字符,s的生成算法如下:
生成一段字符串s=x[0,1],x1[0,1],x2[0,1],x[2,3]…,也就是轮流三段字符串,按两个字符顺序组合出新的一段字符串,注意,这里使用md5得到的是一段把md5数值转16进制的字符。

最后还是需要把字符转数值,这里只是为了方便说明,实际可以直接就是数值放进去,但是注意分割时,需要拿一个8位数。也就是最大是255,用户要求所有字符加起来的值小于255,所以可以选8位,如果觉得这个选择太大,可以使用自己计算的方法。

假如生成md5的是49541A094FE0300DB87109AFEB306207其中的每一个字符表示16进制数值。

于是两个两个拿出来按照顺序放到s中。两个两个拿出来可以作为混淆,虽然现在md5可以被破解,但是生成密码是无法得到用户的账号和密码和输入域名,所以不需要担心。

  1. 进行混淆

上面得到的s可能不够复杂,于是需要对上面生成的s进行混淆,混淆可以使用我的加密算法进行混淆。

使用之前的我写的哈希算法,可以把s混淆。

使用方法是申请一段缓存区,使用任意的哈希算法,进行哈希乱序,哈希乱序使用的密码是用户输入的密码。

之前的哈希算法存在哈希乱序、填补空白、字符加密,这里只需要进行哈希乱序。输入是s,和用户输入的密码,输出是乱序的 t 。

但是不需要进行填补空白和加密字符。

乱序之后,需要拿出来,拿出来的做法是去掉所有空白部分。使用如下算法,可以获得乱序的s:

首先清空s,然后
循环缓存区,判断当前字符是否是空白,如果不是空白,那么添加进s

这样,得到乱序的s字符串。

虽然得到s可能和没有混淆是一样的,但是这一步即使不加上也是没有问题。

得到的s字符串还不可以作为密码,需要进行最后一步。

  1. 生成密码字符

生成密码字符的难点,如何对应 s 的字符和生成密码的字符。

s 的字符是16进制数值,那么就是表示很少的区,但是可以通过使用两个字符可以表示255个字符,基本用户的要求可以得到。

把s按照两个字符分割,得到48个子字符串s1[],每个s1都是有两个字符。这里的s1是一个数组,包括48个字符串。

两个字符可以算出所有用户要求的字符,可以看到这个方法的不好的地方在于有些字符被用到概率比较高。

所以还需要一个变量记录 a

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 生成密码算法
  • 打造博客园(cnblogs)超级自定义界面
  • CSDN 博客的代码高亮问题自己修复

相关文章

  • 2017-05-12三大UML建模工具Visio、Rational Rose、PowerDesign的区别比较
  • 2017-09-22HTTP状态码
  • 2017-05-12微信 小程序Demo导入详细介绍
  • 2017-05-12windows 中 \r\n 区别于 类unix中的\n 疑问理解(crlf回车换行)
  • 2017-05-12301重定向代码合集(iis,asp,php,asp.net,apache)
  • 2017-05-12GitHub入门教程 手把手教你最简单的开源项目托管
  • 2017-05-12XXencode 编码,XX编码介绍、XXencode编码转换原理与算法
  • 2017-05-12Get方法和Post方法的区别深入理解
  • 2017-05-12Git里多种撤销操作的最佳方法
  • 2017-05-12iisschlp.wsc [88,25] 属性值无效 : progid

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • UTF-8 BOM 可能导致样式错乱的解决方法
    • 算法系列15天速成 第十四天 图【上】
    • Git 教程之安装配置详解
    • alt键 chr码值对应列表查看方法
    • HTML5 拖拽复制功能的实现
    • 代码中到底应不应当写注释?
    • 编码史记
    • 关于Git远程与本地冲突的解决方法
    • UE、UI、UCD、Interaction Design、UED、UX、HCI、Usability,IA
    • 程序员开发项目是选择效率还是质量呢?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有