
1 jkeylu Jun 18, 2013 via Android 放弃这个念头吧骚年 |
2 binux Jun 18, 2013 随便一个hash,base58取8位,over |
5 kuphrer Jun 18, 2013 via iPad 现有算法(sha-256之类的),加一个自定义密钥头。严格保管密钥头则密码坚不可摧。 |
6 ejin Jun 18, 2013 加个盐值就可以了嘛。 |
7 andybest OP |
8 Sunyanzi Jun 18, 2013 |
9 Sunyanzi Jun 18, 2013 我也手滑了 orz ... 一段 base10 一段 base52 ... 然后依据第三段的结果拼在一起 ... |
10 andybest OP @Sunyanzi 感谢,的确可以这样,但这样生成出的密码格式全部相同是不是显得有点搓? 最好能完全随机,无规律性可言的情况下同时包含了大小写与数字 (例如第1个字符可能是数字/大小写,不要第1个字符总是数字这样固定格式) |
11 andybest OP Sunyanzi “一段 base10 一段 base52 ... 然后依据第三段的结果拼在一起” “第三段”是什么怎么生成? 根据什么逻辑将base10与base52的两个hash结果拼在一起?结果的密码会是什么样子的? |
15 Sunyanzi Jun 18, 2013 @andybest 循环 hash 从算法的角度讲不是 保证 肯定会有结果的 ... 虽然概率微乎其微但是依然不是 0 概率不会引发死循环这样 ... 那是个粗暴的办法 ... 组合的逻辑会更精巧复杂一些 ... 效率其实不好说 ... 但我觉得多数情况下是用逻辑拼接来的要快些 ... |
17 breeswish Jun 19, 2013 via Android 先纯数学任意方法hash,然后base52一下将二进制转换为大小写数字 |
18 rrfeng Jun 19, 2013 8位很容易发生碰撞吧? |
21 lichao Jun 19, 2013 一般来说 SHA256 + 随机盐 就可以应付了 |
25 zoho Jun 19, 2013 (1)根据已知 hash 算法生成一个较长的 X 值,分为 7 段;X1 到 X7; (2)用 X1,X2,X3 分别确定大写字母,小写字母,数字三部分的各自长度; (3)分别用 base26,base26,base10 从 X4,X5,X6 中截取前面三部分的字符; (4)利用 X7 值打乱字符串的顺序。 |
26 andybest OP @zoho 感谢,好想法 请问:(4)利用 X7 值打乱字符串的顺序。 这个是使用X7安排 三部分字符 组合逻辑吗? 这一部分怎么实现可以给个例子吗? 比如X7是xxx, 在base26/26/10分别为xxx的时候如何组合。 就是怎样利用X7组合这三个段? |
27 Sunyanzi Jun 19, 2013 @andybest 这个其实交由你自己来决定 ... 我可以提供一个参考思路 ... 假设第三段是个 20 位的 hexstring ... 先取前四位 ... 模 8 取得一个值 ... 如果这个值等于 0 的话继续往下取一位也就是取前五位模 8 ... 直到取得非零值为止 ... 如果十二位都走完了模依然为零 ... 说明这个 hexstring 由 1 0 和 8 组成 ... 我们为这种特殊情况手动定义一个值 ... 比如 3 ... 这个值代表结果中的数字个数 ... 现在假设我们用前五位取到了非零值 ... 以 5 为例吧 ... 后面还剩下十五位 ... 把第三段的开头一位补进来凑够十六位 ... 然后两位一分组 ... 现在我们得到了八个两位的 hexstring ... 前五个 hexstring 模 10 得到五个数字 ... 后三个 hexstring 模 26 得到三个字母 ... 继续处理这八个 hexstring ... 每个 hexstring 取第一位 ... 这代表结果的排序 ... 按照这个排序把我们得到的字母与数字放入对应的位置 ... 假如对应的位置已经有值的话就往后推一位 ... 直到可以放入为止 ... 八位都填入之后 ... 去除没有内容的空位 ... 我们就最终得到了一个肯定包含字母与数字的八位 hash ... 写的比较着急可能有点乱 ... 但大体意思是这样 ... 能看懂么 ..? |
29 zoho Jun 19, 2013 @andybest 模运算啊,将 X7 再分为 7 个数,第一个数模 8 得到该选取 8 个字符中第几个字符,第二个数模 7 得到该选取剩下 7 个字符中的第几个字符,一直下去。。。 |
32 notedit Jun 19, 2013 从base62中截取6位 其他两位根据一定的算法一个是数字一个是字母 |
33 Sunyanzi Jun 19, 2013 @andybest 取模是相对最容易想到的解决方案 ... 对应一般情况也够用 ... 如果考虑到海量样本数量下平衡所有字符的出现率什么的问题 ... 还可以做的更复杂 ... 基本上说到底这就是一个数字到字符的转化 ... 怎么实现还是看个人创意的 ... |
35 wlwood May 4, 2018 8 位太短了吧? |