【发布时间】:2018-07-27 16:43:27
【问题描述】:
我最近决定编写自己的对称加密程序(例如,可用于自定义密码管理器)。 我想听听你对他的看法,我犯了大错吗?不然会不会很容易坏?
它基本上是一个 Vigenere 分叉,试图更接近 Vernam 加密的原理,但仍然易于使用(您可以使用任何密钥来加密您的文本)。
它是如何工作的?
- 您输入一条消息(例如 hello world)和一个种子(例如种子)。
- 种子通过哈希函数转换为数字
- 我们将消息的字母数加到这个数字上,然后我们再次对其进行哈希处理
- 使用结果初始化伪随机数生成器,并生成文本大小的随机数列表(这是关键)。
- 我们将每个字母与列表中的相应数字移位(消息的第一个字母与我们生成的列表的第一个数字移位)
Example : Alphabet: [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z] List : [1,18,3,17,0] Word: "hello" h+1 = j e+18 = w l+3 = o l+17=c (as the alphabet is finished, we continue at the beginning) o+0=o Output: "jwoco"
Vernam 加密原理规定:
- 用于偏移字母的键必须至少与文本大小一样大 -> 没关系
- 密钥只能使用一次 -> 可以更改种子或消息大小(因为我们在用于初始化密钥的哈希中包含了文本大小)
- 密钥必须是完全随机的 -> 这将取决于随机数生成算法和哈希算法,但如果它们很好,我们应该有一个输出,没有密钥就不可能找到更有可能的文本而不是另一个作为原始消息。
我的解释清楚吗?你是否同意我的观点?你有什么要补充的吗?改进建议或随机数生成和哈希算法给我建议?
祝你有美好的一天, 托马斯!
【问题讨论】:
-
我投票结束这个问题,因为这个问题与编程无关。最明显的地方是crypto.stackexchange.com,但their on-topic guide 表示他们也不会接受这个问题。
-
嘿!这是一个真正的编程问题,因为我问你我应该使用哪种哈希算法和随机数生成算法,但是为了理解我的需求,我必须解释系统是如何工作的。如果你愿意,我可以试着把这个问题带出话题?
-
这不是一个对发布有用的编程问题。它甚至没有指定编程生态系统。关于算法,它是相当理论化的,您希望这里的人们深入研究它。它对任何人都没有帮助,它什么也证明不了。我也投票关闭它。
-
您基本上用 vigenere 密码而不是 XOR 重新发明了流密码。至少,你需要一个 CPRNG 并且每次都改变你的 RNG 的种子,否则它很容易受到选择的纯文本攻击。见en.wikipedia.org/wiki/Stream_cipher
-
我投票决定将此问题作为离题结束,因为它属于 crypto.stackexchange.com。一个好问题,但不属于这里。
标签: algorithm encryption encryption-symmetric vigenere