我正在寻找一种或多种加密算法,可以加密密码,加密文本必须是人类可读的。
例如,如果我提供密码:
StackOverflow
算法应该给我:
G0aThiR4i s0ieFer
所以我希望人们可以轻松读取加密密码(不是带有特殊字符或数千个字符的奇怪字符串)。
有哪些算法符合这种需求?
答案 0 :(得分:11)
例如,128位密钥:
CCAC 2AED 5910 56BE 4F90 FD44 1C53 4766
会变成
RASH BUSH MILK LOOK BAD BRIM AVID GAFF BAIT ROT POD LOVE
算法用于固定长度的128位密钥,这是数据大小的基础。源数据可以被截断或扩展以匹配基数。
Spec&在C @ http://tools.ietf.org/html/rfc1751
中实施目前尚不清楚。除了spec& amp;中的一个,我找不到实现提及引用丢失的python库。
答案 1 :(得分:7)
你的问题在很多方面使我感到困惑,导致从基础16哈希结果创建一个完全人类可读的段落的大胆想法。什么比英语句子更可读?
为了保持散列密码的安全性,算法如下:
例如,如果此Base16哈希是输入:
c0143d440bd61b33a65bfa31ac35fe525f7b625f10cd53b7cac8824d02b61dfc
HashViewer的输出是这样的:
烟雾喜欢狗。日志发现积压。日志吞食青蛙。 Grogs斩首障碍物和狗概念化雾。木头迎接木.. Cogs概念化疣猪。尽管沼泽挤压了雾,但博格斯仍然发掘了狗。 Cogs光顾目录。 Cogs玩弄齿轮。疣猪使酒糟透了;不幸的是,木cl玩弄齿轮。疣猪讨厌青蛙;相反,烟雾斩首齿轮。雾概念化balrogs。每当polywogs与蛋酒搭配时,烟雾就会迎面而来。原木斩断青蛙。木槿概念化木..狗斩首疣猪。 (烟雾)
(括号中的最后一个词是留下的词)
在这个光荣的段落形式中,我们可以看两个独立的哈希值,并轻松比较它们,看它们是否不同。
作为一项额外功能,有一个函数可以将英文文本转换回哈希字符串。
享受!
答案 2 :(得分:2)
Step 1) Apply regular encryption algorithm.
Step 2) Base 26-encode it using letters a thru z
Step 3) ???
Step 4) Profit!
更酷的是获得英语的字母大文字发行版。选择一个简单的伪随机数算法,并使用非人类可读的密码哈希对其进行种子设定。然后根据字母在英语语言之前跟随字母的可能性,使用算法来构成一个单词。你会得到真正的英语单词,并且始终是同一个种子。但是,碰撞的可能性可能不合时宜地高。
答案 3 :(得分:0)
EncryptedPassword = Base64(SHA1(UTF8(密码)+盐))
密码是字符串
Salt是加密强随机字节[]
UTF8:字符串 - >字节[]
SHA1:byte [] - >字节[]
Base64:byte [] - >串
EncryptedPassword是字符串
存储(EncryptedPassword,Salt)。
使用您想要的任何加密算法而不是SHA1。
例如,如果密码为StackOverflow
,则会获得加密密码LlijGz/xNSRXQXtbgNs+UIdOCwU
。