[加密算法] 有没有可以 ‘限制密文长度’ 且 ‘可逆’ 加密算法?

2019-01-29 16:07:24 +08:00
 lqzhgood
steam 账号丢了~ 我估摸着是撞库。
用 算法 代替 密码 的想法由来已久了,是时候行动了。

大致想法如下:
域名 /用户名等----------算法--------->密码----------- [秘钥 + 加密算法] ---------> 密文

虽然通过算法生成后的密码已经足够好了(至少不会被撞库),但是还是想一步到位。再用一个加密算法加固下。

因为准备再写一个 Chrome 扩展来解决密文生成的问题,所以准备用 js 现实,看了下 node 的库 cryptojs。
但是 AES 4 位秘钥 10 位密码 生成的密文 高达 44 位。。。。
一般密码填写仅允许 16 位。

实在对密码学不了解。。。。

在这里求一个
4~6 位秘钥 + 10 位左右文本 生成的密文长度能在 ‘ 16 位’ 以内的 ‘可逆’ 加密算法。。。
10658 次点击
所在节点    程序员
68 条回复
binux
2019-01-29 16:14:36 +08:00
你这 44 位和 16 位,这两个位是同一个量词吗?
Vegetable
2019-01-29 16:16:02 +08:00
如果你的用户名是 16 位以上的,比如邮箱
可逆的算法无法稳定的将密文控制在 16 位以内.
可逆没必要吧.
btw,很多加密算法要把结果转为 hex,hex 是十六进制,26 个字母都没用全.
flowfire
2019-01-29 16:17:30 +08:00
不存在,固定输出长度不可能有可逆
youzhao
2019-01-29 16:18:26 +08:00
@flowfire 说得对
crab
2019-01-29 16:19:46 +08:00
取加密后前 16 位
lqzhgood
2019-01-29 16:23:42 +08:00
@flowfire
我不是说固定长度=16。
我只是说 16 位以内的。
因为一般密码最多允许 16 位
lqzhgood
2019-01-29 16:24:47 +08:00
@binux 是的。。 我说的是 "abcde".length = 5 位
exch4nge
2019-01-29 16:27:46 +08:00
想要密文跟明文长度一样的话,用流加密吧,或者用 CTR 分组模式当流加密用也行。具体 node 里什么库,什么函数,我不是特别清楚。
flowfire
2019-01-29 16:27:59 +08:00
@lqzhgood 跟位数是多少没关系,只要长度不可变,就不可能可逆,就好比固定尺寸的盒子不可能装下所有东西,不论这个盒子有多大
lastpass
2019-01-29 16:29:19 +08:00
既然已经使用浏览器,不如换个思路?
直接 lastpass 完全随机密码走起。
连我自己都不知道密码,还有比这更安全的吗?
要是在线不放心。可以试试完全本地版 keepass 嘛。
lqzhgood
2019-01-29 16:29:22 +08:00
@Vegetable
谢谢提醒~
我在想是不是自己弄个 密码表
1-0 a-z A-Z 然后乱七八糟的符号加进去~ 弄个 100 进制。

然后想个啥算法把 文本 通过这个 100 进制 映射成 一个密文。 这样应该可以很大程度缩短密文的长度了。
catror
2019-01-29 16:29:44 +08:00
没看懂,加密后的密文打算用来干啥?也作为密码用?
如果要长度不变,就用简单的置换加密,规则自己定义。
ZRS
2019-01-29 16:32:36 +08:00
密文长度和明文长度一致是可以做到的,流加密就是这样


不过说到底...请使用密码管理软件不要自己造轮子...
lqzhgood
2019-01-29 16:33:24 +08:00
@flowfire 没搞懂您说的长度不可变啥意思~
我是说 一段 10 个字符长度的文本通过 4~6 个字符的秘钥 生成 0-16 个字符之间密文。 这样的算法。
reus
2019-01-29 16:36:11 +08:00
可逆怎么可能限制长度,不要试图挑战香农
dbw9580
2019-01-29 17:17:05 +08:00
TomVista
2019-01-29 17:21:06 +08:00
你在密码里固定位置插入固定字符,然后进行一些可逆的骚操作,最后在逆回来,然后去字符串???可以把.

没学过加密.
pabupa
2019-01-29 17:47:46 +08:00
原来有好几把钥匙,现在只需要一把! O_o
ysc3839
2019-01-29 17:56:18 +08:00
推荐使用 KeePass 密码管理器。比自己实现简单多了。
sdijeenx
2019-01-29 18:12:46 +08:00
没必要吧,用随机数代替账号密码不就好了么=3=
我的用户名就是滚键盘按出来的,密码用 keychain 建议密码。

辣鸡箱里随便找的代码片,LZ 拿去玩吧=3=

#输出 16 位随机数

import random

def getradnstring(a):
out = ''
for x in range(1,a):
out += random.choice('abcdefghijklmnopqrstuvwxyz')
return out

getradnstring(17)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/531620

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX