`
lindexi-gd
  • 浏览: 139468 次
社区版块
存档分类
最新评论

生成密码

 
阅读更多

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

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

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

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

<!-- csdn -->

这是一个生成密码算法。

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

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

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

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

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

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

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

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

<!-- &#29992;&#25143;&#21487;&#20197;&#23545;&#19968;&#20010;&#32593;&#31449;&#36873;&#25321;&#22791;&#29992;&#65292;&#21363;&#29983;&#25104;&#22810;&#20010;&#23494;&#30721;&#65292;&#23545;&#20110;&#29992;&#25143;&#35201;&#27714;&#36755;&#20837;&#21253;&#25324; -->

算法:

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

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

  1. 生成组合字符

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

<nobr><span class="math" id="MathJax-Span-7232" style="width: 11.21em; display: inline-block;"><span style="width: 8.96em; height: 0px; font-size: 125%; display: inline-block; position: relative;"><span style="left: 0em; top: -2.72em; position: absolute; clip: rect(1.76em, 1000em, 3.13em, -0.44em);"><span class="mrow" id="MathJax-Span-7233"><span class="mi" id="MathJax-Span-7234" style="font-family: MathJax_Math; font-style: italic;">x</span><span class="mo" id="MathJax-Span-7235" style="padding-left: 0.27em; font-family: MathJax_Main;">=</span><span class="mi" id="MathJax-Span-7236" style="padding-left: 0.27em; font-family: MathJax_Math; font-style: italic;">m</span><span class="mi" id="MathJax-Span-7237" style="font-family: MathJax_Math; font-style: italic;">d<span style="width: 0em; height: 1px; overflow: hidden; display: inline-block;"></span></span><span class="mn" id="MathJax-Span-7238" style="font-family: MathJax_Main;">5</span><span class="mo" id="MathJax-Span-7239" style="font-family: MathJax_Main;">(</span><span class="texatom" id="MathJax-Span-7240"><span class="mrow" id="MathJax-Span-7241"><span class="mo" id="MathJax-Span-7242"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>账</span></span></span></span><span class="texatom" id="MathJax-Span-7243"><span class="mrow" id="MathJax-Span-7244"><span class="mo" id="MathJax-Span-7245"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>号</span></span></span></span><span class="mo" id="MathJax-Span-7246" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-7247" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-7248"><span class="mo" id="MathJax-Span-7249"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>域</span></span></span></span><span class="texatom" id="MathJax-Span-7250"><span class="mrow" id="MathJax-Span-7251"><span class="mo" id="MathJax-Span-7252"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>名</span></span></span></span><span class="mo" id="MathJax-Span-7253" style="font-family: MathJax_Main;">)</span></span><span style="width: 0px; height: 2.72em; display: inline-block;"></span></span></span><span style="width: 0px; height: 1.44em; overflow: hidden; vertical-align: -0.37em; border-left-color: currentColor; border-left-width: 0em; border-left-style: solid; display: inline-block;"></span></span></nobr><script id="MathJax-Element-267" type="math/tex">x=md5(账号+域名) </script>

<nobr><span class="math" id="MathJax-Span-7254" style="width: 11.88em; display: inline-block;"><span style="width: 9.49em; height: 0px; font-size: 125%; display: inline-block; position: relative;"><span style="left: 0em; top: -2.72em; position: absolute; clip: rect(1.76em, 1000em, 3.13em, -0.44em);"><span class="mrow" id="MathJax-Span-7255"><span class="mi" id="MathJax-Span-7256" style="font-family: MathJax_Math; font-style: italic;">x</span><span class="mn" id="MathJax-Span-7257" style="font-family: MathJax_Main;">1</span><span class="mo" id="MathJax-Span-7258" style="padding-left: 0.27em; font-family: MathJax_Main;">=</span><span class="mi" id="MathJax-Span-7259" style="padding-left: 0.27em; font-family: MathJax_Math; font-style: italic;">m</span><span class="mi" id="MathJax-Span-7260" style="font-family: MathJax_Math; font-style: italic;">d<span style="width: 0em; height: 1px; overflow: hidden; display: inline-block;"></span></span><span class="mn" id="MathJax-Span-7261" style="font-family: MathJax_Main;">5</span><span class="mo" id="MathJax-Span-7262" style="font-family: MathJax_Main;">(</span><span class="texatom" id="MathJax-Span-7263"><span class="mrow" id="MathJax-Span-7264"><span class="mo" id="MathJax-Span-7265"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>密</span></span></span></span><span class="texatom" id="MathJax-Span-7266"><span class="mrow" id="MathJax-Span-7267"><span class="mo" id="MathJax-Span-7268"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>码</span></span></span></span><span class="mo" id="MathJax-Span-7269" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-7270" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-7271"><span class="mo" id="MathJax-Span-7272"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>域</span></span></span></span><span class="texatom" id="MathJax-Span-7273"><span class="mrow" id="MathJax-Span-7274"><span class="mo" id="MathJax-Span-7275"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>名</span></span></span></span><span class="mo" id="MathJax-Span-7276" style="font-family: MathJax_Main;">)</span></span><span style="width: 0px; height: 2.72em; display: inline-block;"></span></span></span><span style="width: 0px; height: 1.44em; overflow: hidden; vertical-align: -0.37em; border-left-color: currentColor; border-left-width: 0em; border-left-style: solid; display: inline-block;"></span></span></nobr><script id="MathJax-Element-268" type="math/tex">x1=md5(密码+域名) </script>

<nobr><span class="math" id="MathJax-Span-7277" style="width: 15.35em; display: inline-block;"><span style="width: 12.26em; height: 0px; font-size: 125%; display: inline-block; position: relative;"><span style="left: 0em; top: -2.72em; position: absolute; clip: rect(1.76em, 1000em, 3.13em, -0.44em);"><span class="mrow" id="MathJax-Span-7278"><span class="mi" id="MathJax-Span-7279" style="font-family: MathJax_Math; font-style: italic;">x</span><span class="mn" id="MathJax-Span-7280" style="font-family: MathJax_Main;">2</span><span class="mo" id="MathJax-Span-7281" style="padding-left: 0.27em; font-family: MathJax_Main;">=</span><span class="mi" id="MathJax-Span-7282" style="padding-left: 0.27em; font-family: MathJax_Math; font-style: italic;">m</span><span class="mi" id="MathJax-Span-7283" style="font-family: MathJax_Math; font-style: italic;">d<span style="width: 0em; height: 1px; overflow: hidden; display: inline-block;"></span></span><span class="mn" id="MathJax-Span-7284" style="font-family: MathJax_Main;">5</span><span class="mo" id="MathJax-Span-7285" style="font-family: MathJax_Main;">(</span><span class="texatom" id="MathJax-Span-7286"><span class="mrow" id="MathJax-Span-7287"><span class="mo" id="MathJax-Span-7288"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>账</span></span></span></span><span class="texatom" id="MathJax-Span-7289"><span class="mrow" id="MathJax-Span-7290"><span class="mo" id="MathJax-Span-7291"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>号</span></span></span></span><span class="mo" id="MathJax-Span-7292" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-7293" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-7294"><span class="mo" id="MathJax-Span-7295"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>密</span></span></span></span><span class="texatom" id="MathJax-Span-7296"><span class="mrow" id="MathJax-Span-7297"><span class="mo" id="MathJax-Span-7298"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>码</span></span></span></span><span class="mo" id="MathJax-Span-7299" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-7300" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-7301"><span class="mo" id="MathJax-Span-7302"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>域</span></span></span></span><span class="texatom" id="MathJax-Span-7303"><span class="mrow" id="MathJax-Span-7304"><span class="mo" id="MathJax-Span-7305"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>名</span></span></span></span><span class="mo" id="MathJax-Span-7306" style="font-family: MathJax_Main;">)</span></span><span style="width: 0px; height: 2.72em; display: inline-block;"></span></span></span><span style="width: 0px; height: 1.44em; overflow: hidden; vertical-align: -0.37em; border-left-color: currentColor; border-left-width: 0em; border-left-style: solid; display: inline-block;"></span></span></nobr><script id="MathJax-Element-269" type="math/tex">x2=md5(账号+密码+域名)</script>

根据生成的中间值,可以计算出字符串s作为密码的生成字符,s的生成算法如下:
生成一段字符串<nobr><span class="math" id="MathJax-Span-7307" style="width: 19.61em; display: inline-block;"><span style="width: 15.68em; height: 0px; font-size: 125%; display: inline-block; position: relative;"><span style="left: 0em; top: -2.72em; position: absolute; clip: rect(1.81em, 1000em, 3.13em, -0.42em);"><span class="mrow" id="MathJax-Span-7308"><span class="mi" id="MathJax-Span-7309" style="font-family: MathJax_Math; font-style: italic;">s</span><span class="mo" id="MathJax-Span-7310" style="padding-left: 0.27em; font-family: MathJax_Main;">=</span><span class="mi" id="MathJax-Span-7311" style="padding-left: 0.27em; font-family: MathJax_Math; font-style: italic;">x</span><span class="mo" id="MathJax-Span-7312" style="font-family: MathJax_Main;">[</span><span class="mn" id="MathJax-Span-7313" style="font-family: MathJax_Main;">0</span><span class="mo" id="MathJax-Span-7314" style="font-family: MathJax_Main;">,</span><span class="mn" id="MathJax-Span-7315" style="padding-left: 0.16em; font-family: MathJax_Main;">1</span><span class="mo" id="MathJax-Span-7316" style="font-family: MathJax_Main;">]</span><span class="mo" id="MathJax-Span-7317" style="font-family: MathJax_Main;">,</span><span class="mi" id="MathJax-Span-7318" style="padding-left: 0.16em; font-family: MathJax_Math; font-style: italic;">x</span><span class="mn" id="MathJax-Span-7319" style="font-family: MathJax_Main;">1</span><span class="mo" id="MathJax-Span-7320" style="font-family: MathJax_Main;">[</span><span class="mn" id="MathJax-Span-7321" style="font-family: MathJax_Main;">0</span><span class="mo" id="MathJax-Span-7322" style="font-family: MathJax_Main;">,</span><span class="mn" id="MathJax-Span-7323" style="padding-left: 0.16em; font-family: MathJax_Main;">1</span><span class="mo" id="MathJax-Span-7324" style="font-family: MathJax_Main;">]</span><span class="mo" id="MathJax-Span-7325" style="font-family: MathJax_Main;">,</span><span class="mi" id="MathJax-Span-7326" style="padding-left: 0.16em; font-family: MathJax_Math; font-style: italic;">x</span><span class="mn" id="MathJax-Span-7327" style="font-family: MathJax_Main;">2</span><span class="mo" id="MathJax-Span-7328" style="font-family: MathJax_Main;">[</span><span class="mn" id="MathJax-Span-7329" style="font-family: MathJax_Main;">0</span><span class="mo" id="MathJax-Span-7330" style="font-family: MathJax_Main;">,</span><span class="mn" id="MathJax-Span-7331" style="padding-left: 0.16em; font-family: MathJax_Main;">1</span><span class="mo" id="MathJax-Span-7332" style="font-family: MathJax_Main;">]</span><span class="mo" id="MathJax-Span-7333" style="font-family: MathJax_Main;">,</span><span class="mi" id="MathJax-Span-7334" style="padding-left: 0.16em; font-family: MathJax_Math; font-style: italic;">x</span><span class="mo" id="MathJax-Span-7335" style="font-family: MathJax_Main;">[</span><span class="mn" id="MathJax-Span-7336" style="font-family: MathJax_Main;">2</span><span class="mo" id="MathJax-Span-7337" style="font-family: MathJax_Main;">,</span><span class="mn" id="MathJax-Span-7338" style="padding-left: 0.16em; font-family: MathJax_Main;">3</span><span class="mo" id="MathJax-Span-7339" style="font-family: MathJax_Main;">]</span><span class="mo" id="MathJax-Span-7340" style="padding-left: 0.16em; font-family: MathJax_Main;">…</span></span><span style="width: 0px; height: 2.72em; display: inline-block;"></span></span></span><span style="width: 0px; height: 1.38em; overflow: hidden; vertical-align: -0.37em; border-left-color: currentColor; border-left-width: 0em; border-left-style: solid; display: inline-block;"></span></span></nobr><script id="MathJax-Element-270" type="math/tex">s=x[0,1],x1[0,1],x2[0,1],x[2,3]…</script>,也就是轮流三段字符串,按两个字符顺序组合出新的一段字符串,注意,这里使用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个字符串。

<!-- &#21462;&#20986;&#31532;&#19968;&#20010;&#23383;&#31526;&#65292;&#31532;&#19968;&#20010;&#23383;&#31526;&#26159;&#21010;&#20998;&#29992;&#25143;&#35201;&#27714;&#65292;&#31532;&#20108;&#20010;&#23383;&#31526;&#26159;&#21028;&#23450;&#25152;&#22312;&#30340;&#20301;&#32622;&#65292; -->

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

所以还需要一个变量记录 a ,用于计算用户要求不同类型出现数,在得到字符步骤,对字符进行偏移。偏移的意思:先把字符组成环,然后把字符向右偏移 a 个字符。

计算生成密码字符串S算法如下

    循环所有 s1

首先将要求所有类型字符分区域,计算总数l,转换s1字符为数值。

对s1取模l,得到对应数所在区域。添加a[区域]+1,对应字符向后移动 a[区域]。

得到的字符添加到 S 

首先对 a 进行解释:

首先把要求所有字符写成环,把获得字符向右移动a,得到字符。原先是n移动5得到s。

先说一个例子,对于区域和对应字符需要做解释。

假如用户要求有3种,英文、数值、特殊符号

假如英文数量有 25 个,数值有 10 个,特殊符号有10个

那么组成的线大小是 l 25+10+10=45

对应英文区是 [0,24] 对应数值区是[25,34] 对应特殊符号区是 [35,44]

两个16进制字符最大值是 255

所以先把两个字符转数值 n

对n取模l,得到x。那么在l中,x一定会在某个区域,判断x落下区域。

添加对应区域 (a[区域]+1) 对应字符,如果字符超过区域,那么对字符取模,得到的值添加到S。

循环直到结束。

就可以获得S密码字符。

假如 s1[0]=49 s1[1]=54 ,这里不是十进制

<!-- 73 84 -->

那么第一个字符取模得到 28, 第二个得到 39

那么第一个字符所在位置是 数值区,于是 a[数值]+1=1

28+1对应数值区的’4’,于是记录到S+=’4’

第二个字符所在区是特殊字符区,a[特殊]+1=1

39+1 对应特殊的’$’ 于是记录到S,这里,我特殊字符的排序没有给出来,实际的排序可以任意排序,但是特殊字符排序是算法中固定的。

这样就得到 S=4$

继续计算就可以得到S。

这样算法对于计算首先是对于区域进行计算,可以得到落在不同区域的概率是不同的,这是算法的缺点,但是和现实需要是一样的。

网站让用户输入英文和数值,那么比较多的人会输入英文数多于中文,这是某大神提供的。
<!-- Console.Write('z'-'a'); -->

<!-- Console.Write(73%45); -->
<!-- Console.Write(84%45); -->

<!-- 29 - 25&#10;0 1 2 3 4 -->

接着计算S是否包含有用户选择的所有类型,如果存在一个类型没有存在,那么使用哈希S+=has(类型) 添加一个类型到字符串最后。

这个算法是可以让生成的S包含所有类型。虽然一般需要的类型都可以生成,但是有些输入可以存在某些类型不存在,于是需要让S添加所有存在的类型。假如生成的S只有英文和数值,没有特殊字符,但是用户需要特殊字符,那么就需要这个算法来得到特殊字符。得到的特殊字符需要和用户输入关联,所以需要has算法。

如何识别存在哪些类型,哪些没有,编码难度还是比较高,但是不难做,一次循环就可以做到,只是定义的数据结构相对比较难。当然,相信花10分钟还是可以想出来,这是我做过的ACM有的。

其中has函数为

char has(类型)
{
    var h = 3655; 这是一个大的数,工程经验
    var a = 0;
    var b = Int.Max;这是最大的一个数
    var str=new {x,x1,x2};//直接组合中间值
    foreach(s:str) 循环str
    {
        foreach(t:s) 循环所有字符
        {
            h=(a+t)&&b || (a+t); 算法是选一个哈希算法,可以选择其他
            a=b<<t;
            b=b<<t;
        }
    }

    return (char)(h%(类型上限-类型下限)+类型下限+1);
}

has就是生成一个类型随机的字符,当然随机只是说生成的很难猜出,只要给出一样的输入,得到的字符是一样的。

接着就是从S里得到生成密码,生成密码就是给用户的密码。用户可以用生成密码做他需要使用的域名的密码。

取出生成密码算法:

取长度 <nobr><span class="math" id="MathJax-Span-153" style="width: 5.41em; display: inline-block;"><span style="width: 4.32em; height: 0px; font-size: 125%; display: inline-block; position: relative;"><span style="left: 0em; top: -2.72em; position: absolute; clip: rect(1.86em, 1000em, 2.89em, -0.44em);"><span class="mrow" id="MathJax-Span-154"><span class="mi" id="MathJax-Span-155" style="font-family: MathJax_Math; font-style: italic;">l</span><span class="mo" id="MathJax-Span-156" style="padding-left: 0.27em; font-family: MathJax_Main;">=</span><span class="mi" id="MathJax-Span-157" style="padding-left: 0.27em; font-family: MathJax_Math; font-style: italic;">N<span style="width: 0.08em; height: 1px; overflow: hidden; display: inline-block;"></span></span><span class="mo" id="MathJax-Span-158" style="padding-left: 0.22em; font-family: MathJax_Main;">−</span><span class="mi" id="MathJax-Span-159" style="padding-left: 0.22em; font-family: MathJax_Math; font-style: italic;">n</span></span><span style="width: 0px; height: 2.72em; display: inline-block;"></span></span></span><span style="width: 0px; height: 1.01em; overflow: hidden; vertical-align: -0.08em; border-left-color: currentColor; border-left-width: 0em; border-left-style: solid; display: inline-block;"></span></span></nobr><script id="MathJax-Element-7" type="math/tex">l=N-n</script>

N就是需要生成密码的长度,n就是选择类型数。

假如用户需要生成长度为5,需要英文、数值和特殊,那么得到 l=2

我们将会在S取出前l个字符,之所以要取出前l个,是因为用于必须要有类型,如果取出来的字符没有存在一个被选择类型的,那么在最后加类型。

循环密码k=S[0,l],如果k存在不包含选择的类型,那么继续往s[l] 之后的字符找,找到第一个选择的类型,放入k,直到所有类型都被找到。

如果这时密码的长度小于N,那么往下取 s[l] 的字符,直到密码长度为N。

假如生成的S是 4$5123123123123123123123a

用户需要的长度N=5

于是计算 l = 5-3=2

取出S前 2 字符 4$

判断存在类型 数值和特殊,于是剩下英文,从2开始向后寻找,直到第一个英文,找到a,于是得到4$a。判断不存在的类型,已经所有类型都存在,于是继续往下拿字符,直到N。l之后的字符是512312312,最后得到4$a51

这就是密码生成算法。

但是可以看到,如果用户需要一个域名多个账户,也就是需要一个域名有多个密码,那么上面算法就无法得到。如果用户输入一个密码,一段时间想换新的密码,上面算法也无法得到。所以算法需要用户再输入一个数值,表示这是第多少次的密码。

所以用户的输入就包括:

  1. 用户账号

  2. 用户密码

  3. 域名

  4. 要求

  5. 备用

其中最后一个备用就是让用户输入这是第n次生成密码,也就是前面第n次都是他不喜欢的,或者使用的。

那么算法需要做哪些调节?

首先在开始的生成s算法,把组合改成

<nobr><span class="math" id="MathJax-Span-160" style="width: 14.75em; display: inline-block;"><span style="width: 11.78em; height: 0px; font-size: 125%; display: inline-block; position: relative;"><span style="left: 0em; top: -2.72em; position: absolute; clip: rect(1.76em, 1000em, 3.13em, -0.44em);"><span class="mrow" id="MathJax-Span-161"><span class="mi" id="MathJax-Span-162" style="font-family: MathJax_Math; font-style: italic;">x</span><span class="mo" id="MathJax-Span-163" style="padding-left: 0.27em; font-family: MathJax_Main;">=</span><span class="mi" id="MathJax-Span-164" style="padding-left: 0.27em; font-family: MathJax_Math; font-style: italic;">m</span><span class="mi" id="MathJax-Span-165" style="font-family: MathJax_Math; font-style: italic;">d<span style="width: 0em; height: 1px; overflow: hidden; display: inline-block;"></span></span><span class="mn" id="MathJax-Span-166" style="font-family: MathJax_Main;">5</span><span class="mo" id="MathJax-Span-167" style="font-family: MathJax_Main;">(</span><span class="texatom" id="MathJax-Span-168"><span class="mrow" id="MathJax-Span-169"><span class="mo" id="MathJax-Span-170"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>账</span></span></span></span><span class="texatom" id="MathJax-Span-171"><span class="mrow" id="MathJax-Span-172"><span class="mo" id="MathJax-Span-173"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>号</span></span></span></span><span class="mo" id="MathJax-Span-174" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-175" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-176"><span class="mo" id="MathJax-Span-177"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>域</span></span></span></span><span class="texatom" id="MathJax-Span-178"><span class="mrow" id="MathJax-Span-179"><span class="mo" id="MathJax-Span-180"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>名</span></span></span></span><span class="mo" id="MathJax-Span-181" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-182" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-183"><span class="mo" id="MathJax-Span-184"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>备</span></span></span></span><span class="texatom" id="MathJax-Span-185"><span class="mrow" id="MathJax-Span-186"><span class="mo" id="MathJax-Span-187"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>用</span></span></span></span><span class="mo" id="MathJax-Span-188" style="font-family: MathJax_Main;">)</span></span><span style="width: 0px; height: 2.72em; display: inline-block;"></span></span></span><span style="width: 0px; height: 1.44em; overflow: hidden; vertical-align: -0.37em; border-left-color: currentColor; border-left-width: 0em; border-left-style: solid; display: inline-block;"></span></span></nobr><script id="MathJax-Element-8" type="math/tex">x=md5(账号+域名+备用)</script>

<nobr><span class="math" id="MathJax-Span-189" style="width: 15.35em; display: inline-block;"><span style="width: 12.26em; height: 0px; font-size: 125%; display: inline-block; position: relative;"><span style="left: 0em; top: -2.72em; position: absolute; clip: rect(1.76em, 1000em, 3.13em, -0.44em);"><span class="mrow" id="MathJax-Span-190"><span class="mi" id="MathJax-Span-191" style="font-family: MathJax_Math; font-style: italic;">x</span><span class="mn" id="MathJax-Span-192" style="font-family: MathJax_Main;">1</span><span class="mo" id="MathJax-Span-193" style="padding-left: 0.27em; font-family: MathJax_Main;">=</span><span class="mi" id="MathJax-Span-194" style="padding-left: 0.27em; font-family: MathJax_Math; font-style: italic;">m</span><span class="mi" id="MathJax-Span-195" style="font-family: MathJax_Math; font-style: italic;">d<span style="width: 0em; height: 1px; overflow: hidden; display: inline-block;"></span></span><span class="mn" id="MathJax-Span-196" style="font-family: MathJax_Main;">5</span><span class="mo" id="MathJax-Span-197" style="font-family: MathJax_Main;">(</span><span class="texatom" id="MathJax-Span-198"><span class="mrow" id="MathJax-Span-199"><span class="mo" id="MathJax-Span-200"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>密</span></span></span></span><span class="texatom" id="MathJax-Span-201"><span class="mrow" id="MathJax-Span-202"><span class="mo" id="MathJax-Span-203"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>码</span></span></span></span><span class="mo" id="MathJax-Span-204" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-205" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-206"><span class="mo" id="MathJax-Span-207"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>域</span></span></span></span><span class="texatom" id="MathJax-Span-208"><span class="mrow" id="MathJax-Span-209"><span class="mo" id="MathJax-Span-210"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>名</span></span></span></span><span class="mo" id="MathJax-Span-211" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-212" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-213"><span class="mo" id="MathJax-Span-214"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>备</span></span></span></span><span class="texatom" id="MathJax-Span-215"><span class="mrow" id="MathJax-Span-216"><span class="mo" id="MathJax-Span-217"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>用</span></span></span></span><span class="mo" id="MathJax-Span-218" style="font-family: MathJax_Main;">)</span></span><span style="width: 0px; height: 2.72em; display: inline-block;"></span></span></span><span style="width: 0px; height: 1.44em; overflow: hidden; vertical-align: -0.37em; border-left-color: currentColor; border-left-width: 0em; border-left-style: solid; display: inline-block;"></span></span></nobr><script id="MathJax-Element-9" type="math/tex">x1=md5(密码+域名+备用)</script>

<nobr><span class="math" id="MathJax-Span-219" style="width: 18.88em; display: inline-block;"><span style="width: 15.09em; height: 0px; font-size: 125%; display: inline-block; position: relative;"><span style="left: 0em; top: -2.72em; position: absolute; clip: rect(1.76em, 1000em, 3.13em, -0.44em);"><span class="mrow" id="MathJax-Span-220"><span class="mi" id="MathJax-Span-221" style="font-family: MathJax_Math; font-style: italic;">x</span><span class="mn" id="MathJax-Span-222" style="font-family: MathJax_Main;">2</span><span class="mo" id="MathJax-Span-223" style="padding-left: 0.27em; font-family: MathJax_Main;">=</span><span class="mi" id="MathJax-Span-224" style="padding-left: 0.27em; font-family: MathJax_Math; font-style: italic;">m</span><span class="mi" id="MathJax-Span-225" style="font-family: MathJax_Math; font-style: italic;">d<span style="width: 0em; height: 1px; overflow: hidden; display: inline-block;"></span></span><span class="mn" id="MathJax-Span-226" style="font-family: MathJax_Main;">5</span><span class="mo" id="MathJax-Span-227" style="font-family: MathJax_Main;">(</span><span class="texatom" id="MathJax-Span-228"><span class="mrow" id="MathJax-Span-229"><span class="mo" id="MathJax-Span-230"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>账</span></span></span></span><span class="texatom" id="MathJax-Span-231"><span class="mrow" id="MathJax-Span-232"><span class="mo" id="MathJax-Span-233"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>号</span></span></span></span><span class="mo" id="MathJax-Span-234" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-235" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-236"><span class="mo" id="MathJax-Span-237"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>密</span></span></span></span><span class="texatom" id="MathJax-Span-238"><span class="mrow" id="MathJax-Span-239"><span class="mo" id="MathJax-Span-240"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>码</span></span></span></span><span class="mo" id="MathJax-Span-241" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-242" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-243"><span class="mo" id="MathJax-Span-244"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>域</span></span></span></span><span class="texatom" id="MathJax-Span-245"><span class="mrow" id="MathJax-Span-246"><span class="mo" id="MathJax-Span-247"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>名</span></span></span></span><span class="mo" id="MathJax-Span-248" style="padding-left: 0.22em; font-family: MathJax_Main;">+</span><span class="texatom" id="MathJax-Span-249" style="padding-left: 0.22em;"><span class="mrow" id="MathJax-Span-250"><span class="mo" id="MathJax-Span-251"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>备</span></span></span></span><span class="texatom" id="MathJax-Span-252"><span class="mrow" id="MathJax-Span-253"><span class="mo" id="MathJax-Span-254"><span style='font-family: STIXGeneral,"Arial Unicode MS",serif; font-size: 80%; font-style: normal; font-weight: normal;'>用</span></span></span></span><span class="mo" id="MathJax-Span-255" style="font-family: MathJax_Main;">)</span></span><span style="width: 0px; height: 2.72em; display: inline-block;"></span></span></span><span style="width: 0px; height: 1.44em; overflow: hidden; vertical-align: -0.37em; border-left-color: currentColor; border-left-width: 0em; border-left-style: solid; display: inline-block;"></span></span></nobr><script id="MathJax-Element-10" type="math/tex">x2=md5(账号+密码+域名+备用)</script>

这样就可以。

上次申请ca发现这个算法和LassPass算法差不多,只是使用我之前的算法混淆和一些地方不同,但是基本流程相同,可以认为这个算法是比较好的,可以自己试试写自己的生成密码算法。

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    自动生成密码脚本.rar

    本文将深入探讨如何使用Python编写脚本来自动生成密码,以及如何结合批处理文件(.bat)来实现这一过程。 首先,"自动生成密码脚本.rar"是一个压缩包,包含以下三个文件: 1. **自动生成密码脚本.bat**:这是一个...

    MySQL 安装版 自动生成密码

    MySQL 安装版 自动生成密码

    生成密码的软件

    生成密码的软件 根据你输入的密码和当前时间生成唯一的新密码,并且保存在数据库里,并且可以恢复密码,整个程序很简单,没用到VB默认以外的控件,所以只有34K,有VB6的支持库就可运行。 需要原代码的请给我...

    参加竞赛的一道题目,根据用户名生成密码

    生成密码:输入小写字母,每六个一行排列,将每列字母的ASCII码相加,得到的数字如果为两位数以上则进行缩位,具体方法为:182=1+8+2=11=1+1=2。最后输出六位数作为密码。 如:输入aaaaaabb,得到密码为:667777

    密码生成器,随机生成密码的小软件

    随机生成密码,也就是生成随机的字符串。可以选择是否包含特殊字符。

    pb随机生成密码实例

    在这个"pb随机生成密码实例"中,我们探讨的是如何使用一种名为"Pb"(可能是Python的简写或者某种编程工具的缩写)来创建安全且随机的密码。对于初学者来说,理解这个过程有助于提升对密码安全性和编程基础的理解。 ...

    时间戳生成密码

    根据时间戳,生成在指定时间内有效的开锁密码,密码位数由codeDigits决定

    生成密码工具 vc6.0源代码

    在这个场景中,我们关注的是一个使用Microsoft Visual C++ 6.0(简称VC6.0)编写的生成密码的工具。这个工具具有高度定制化的功能,可以帮助用户创建特定需求的密码。 首先,让我们详细了解一下标题和描述中的关键...

    C语言动态生成密码,可以随意设置密码长度

    在C语言中,动态生成密码是一项常见的任务,尤其在安全编程领域。这个程序可能使用了rand()函数来生成随机数,srand()函数初始化随机数生成器,以及malloc函数动态分配内存,以便处理用户自定义长度的密码。下面将...

    装饰模式生成密码实例

    在这个"装饰模式生成密码实例"中,我们将深入探讨如何利用装饰模式来创建一个动态生成安全密码的系统。 首先,让我们从基础开始。在装饰模式中,我们有四个主要组件: 1. **Component(组件)**:这是被装饰的对象...

    亦思社会工程学字典生成器V1.2绿色版自定义信息生成密码

    亦思社会工程学字典生成器V1.2绿色版自定义信息生成密码 亦思社会工程学字典生成器V1.2绿色版自定义信息生成密码.

    易语言密码生成器源码.rar

    在生成密码时,可能需要将各种字符类型(如大写字母、小写字母、数字和特殊字符)的随机组合起来。 3. **条件判断与循环**:为了确保密码满足特定长度和复杂度要求,程序会包含判断语句(如`如果...那么...`)和...

    随机密码生成器

    `GenerateRandomPassword`函数会根据输入参数生成密码,然后将其设置到PasswordTextBox中显示。 这个简单的WPF应用程序展示了如何结合UI设计和业务逻辑来创建一个实用的工具。通过学习和实践此类项目,开发者可以更...

    随机的密码生成器 可以随机生成密码

    随机的密码生成器 可以随机生成密码 详细的功能就不用我说了

    VBS随机生成密码【原创】

    用VBS生成密码可将密码拷贝到剪贴板alt_f20@163.com

    Delphi密码生成程序.rar

    根据描述,用户可以选择生成密码的类型,这可能意味着程序提供了不同的选项,比如是否包含大写字母、小写字母、数字、特殊字符等。生成的密码格式可以根据这些设定进行调整,以满足不同安全级别需求。 密码生成的...

    一个根据个人信息生成密码的工具(基于Qt/C++编写)

    你可以用这个工具根据一些易于记住的信息(比如:姓名、学校、网站地址、电话号码等等)来生成一个较复杂的密码。

    cvs生成密码工具,linux下架设cvs时使用

    cvs生成密码工具,linux下cvs使用

    批处理生成随机密码存于文本文件中

    这个批处理脚本主要用于生成随机密码并将其存储到文本文件中,非常适合那些需要大量安全密码的场景,比如系统管理、数据加密等。 脚本的核心功能是生成满足特定条件的随机密码。根据描述,这些密码至少包含一个大写...

Global site tag (gtag.js) - Google Analytics