今天发现一个帖子上提到过,不可逆的加密算法。

2020-04-11 09:30:31 +08:00
 nnnToTnnn

问一下大家什么叫做不可逆的加密算法? 目前我仅仅只是知道散列算法,取 hash 值。

例如 sha512

明文

123

密文

3c9909afec25354d551dae21590bb26e38d53f2173b8d3dc3eee4c047e7ab1c1eb8b85103e3be7ba613b31bb5c9c36214dc9f14a42fd7a2fdb84856bca5c44c2

解密逻辑就很简单了,找一台运算速度比较高的电脑生成所有字符串的组合。依次对比结果集,不久可以逆向出来密码了吗?

7542 次点击
所在节点    程序员
67 条回复
icyalala
2020-04-11 11:09:14 +08:00
"不可逆的加密算法"? 没这个说法。。。
不可逆那不叫加密。。
Xusually
2020-04-11 11:11:59 +08:00
md5 -s a
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661

md5 -s abcdefghij
MD5 ("abcdefghij") = a925576942e94b2ef57a066101b48876

md5 -s abcdefghij012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890
MD5 ("abcdefghij012345678900123456789001234567890012345678900123456789001234567890012345678900123456789001234567890") = fc82b0bfe7009c54326529881164994c

ls -lh ubuntu-20.04-beta-desktop-amd64.iso
-rwxrwxrwx@ 1 youtellme staff 2.6G 4 6 22:20 ubuntu-20.04-beta-desktop-amd64.iso

md5 ubuntu-20.04-beta-desktop-amd64.iso
MD5 (ubuntu-20.04-beta-desktop-amd64.iso) = d3eff3d41d9d32a0b8a87e4faf8aef25

md5 后的 hash 都是 32 位,那么 1 、10 、100 个字符,甚至下面 2.6GB 的文件,都是 32 位。
这不叫加密,这叫摘要,32 位的字符串,反向无法解密,信息丢失不可避免。参考 香农定理
cmdOptionKana
2020-04-11 11:13:46 +08:00
我好像突然明白楼主的意思了:

假设已知原文是三个数字,那么,从 000, 001, 002 开始算 hash,一直算到 999, 同时与 hash 对比,通过碰撞来“解密”。

在一定条件下,比如原文很短(三个字符),范围很窄( 0-9 ),这种方法也可以达到加密解密的目的。

但并不是一个好方法(太浪费算力,而且与正规加密方法相比也没啥优点)。
yulihao
2020-04-11 11:17:41 +08:00
@cmdOptionKana 要是密码真的像楼主那样那么简单,现在的 CPU 基本上都是秒吧?
huayumo
2020-04-11 11:19:36 +08:00
不可逆,你加密了有什么用?
lagoon
2020-04-11 11:22:51 +08:00
不可逆,直接销毁就是。干嘛加密?

另外,加密本身的定义,就和不可逆违背。
Godikov
2020-04-11 11:26:36 +08:00
不可逆还加什么密
neteroster
2020-04-11 11:30:19 +08:00
* Hash 也就是散列函数:给定一些数据,输出一个摘要。

「所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。但另一方面,散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同,这种情况称为散列碰撞( collision )。」——维基百科

也就是说:由于 Hash 的输出通常是固定长度,而输入的数据可以是任意长度,所以碰撞不可避免的存在。
也就是说:给定一个 Hash,通过穷举查找,不一定找到的是原来输入的数据,因为同一个 Hash 对应很多(也许是无穷多)个输入数据。

* 加密:给定一个密码,一些明文,输出一些密文。

结论:Hash 不是加密,更不是什么「不可逆加密」。
qwerthhusn
2020-04-11 11:39:49 +08:00
非可逆加密 RSA ECDSA
cmdOptionKana
2020-04-11 11:45:32 +08:00
@yulihao 这只是举个例子,实际可以是更长一点。也可以是多个三位数的组合。

他这样做确实可以做到类似于加密解密的效果,但这样做没什么好处。
xFrye
2020-04-11 11:54:16 +08:00
@qwerthhusn 你确定 RSA 是 “非可逆加密” ?
areless
2020-04-11 11:59:11 +08:00
加入 salt,你超算也没用。有个数学时间在里面的。比如 rsa 是可以破解的,大部分破解的理论值超过 20 年左右,所以密钥或者是 salt 是一年一更新才保证安全性
bluefalconjun
2020-04-11 12:00:40 +08:00
littlewing
2020-04-11 12:08:53 +08:00
不可逆还叫加密?那加密了有啥用
lostpg
2020-04-11 12:18:48 +08:00
我推荐一本书嗷,图解密码技术,这本书能解决多数人对密码学的大多数疑问。
mrcn
2020-04-11 12:24:54 +08:00
@learningman #12 歪个楼,magnet 可以,哈哈。
Jooooooooo
2020-04-11 12:42:38 +08:00
md5 就不可逆

把任意一个字符串映射到单个字符上也不可逆
wangxiaoaer
2020-04-11 12:44:20 +08:00
加密一定要能解密,你都不可逆了还加什么密?
JerryCha
2020-04-11 12:48:55 +08:00
一来 hash 不能加密,二来 hash 只是摘要,hash 函数都是一个无穷空间映射到有限空间的单向函数。
你的确可以穷举( brute-force ),那么你有钱有时间穷举吗。你要不以每秒穷举 2^32 个组合的速度算算穷举完 2^512 种结果需要多少年?
jugelizi
2020-04-11 12:50:36 +08:00
月经贴
绝大部分十年经验的程序员都不分 hash 和加密的概念
反推的叫彩虹表 需要多大自己百度了再说

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

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

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

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

© 2021 V2EX