如何制作一个简单的公钥加密算法?

时间:2013-09-26 00:34:41

标签: java encryption cryptography public-key-encryption encryption-asymmetric

我想制作一个简单的公钥(非对称)加密。它没有安全感,我只是想了解它们背​​后的概念。例如,我知道可以使用XOR制作简单的对称密码。我在stackexchange的一个线程中看到你需要使用trapdoor函数,但是我找不到它们。我想说,取一组字节,并能够将它们分开以获得公钥/私钥。我得到了共同秘密的想法。比方说,我生成256的随机数(完全不是随机数:P),我把它分成200和56.如果我用200进行XOR,我只能用200解密。我希望能够分割数字随机的,这样可以不对称地做。

3 个答案:

答案 0 :(得分:26)

好的,只是一个简单的演示理念,基于添加/模运算。

  1. 假设我们有一个模数值,对于我们的示例256.这是一个公知的常见值。

  2. 假设您在区间[1-255]中生成随机密钥私钥,例如,pri = 133。 把密钥放在口袋里。

  3. 生成公钥,pub = 256 - pri = 123.此公钥(123) 你可以分享到这个世界。 想象一下,第三方不知道如何从公众计算私钥。因此,他们只知道公钥(123)。

  4. 来自公众的人希望向您发送加密的ASCII字节。他得到了他的字节,并通过模256操作添加了公钥:

    encrypted = (input_value + pub) % modulto;
    
  5. 例如,我想以加密形式向您发送字母“X”,ASCII码= 88。 所以,我计算:

    (88 + 123) % 256 = 211;
    
    1. 我发送的值为211 - 加密字节。

    2. 您使用私钥通过相同的方案对其进行解密:

      decrypted = (input_value + pri) % 256 = (211 + 133) % 256 = 88;
      
    3. 当然,在这个例子中使用简单的生成对很弱,因为 用于从公众生成私钥的众所周知的算法,任何人都可以使用模数和公共容易地恢复私有。 但是,在真正的密码学中,这种算法是未知的。但是,理论上, 它可以在将来被发现。

答案 1 :(得分:4)

这是一个纯数学领域,有一本名​​为“密码数学”的书,它很短,但是很好的介绍。我建议你远离实现自己的,特别是在Java中(你想要一个针对真实机器的编译器,用于所涉及的数学类型,并相应地进行优化)。你应该在数学或计算机科学堆栈交换中询问这个问题。

我确实得到了一个downvote,所以我想澄清一下。我并不是无情,但是密码是坚定的数学领域,而不是编程(即使它是谨慎的数学,或者是comp-sci的数学方面)它需要对代数结构有一个很好的理解,一些统计数据,它肯定是一个迷人的地方,我鼓励你阅读。我的意思是上面说的,不要使用你做的任何东西,“发明”这些密码的人忘记的比你或我知道的更多,实现他们最多的说法。在Java中你应该期望吞吐量非常差。涉及注册压力和分配的优化会给密码吞吐量带来巨大的回报。 Java是基于堆栈的初学者。

答案 2 :(得分:3)

http://en.wikipedia.org/wiki/RSA_(algorithm)

是(整个)互联网所依据的标准