首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作一个简单的公钥密码算法?

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

Stack Overflow用户
提问于 2013-09-26 08:34:41
回答 3查看 13K关注 0票数 19

我想做一个简单的公钥(非对称)加密。它并不是必须是安全的,我只是想理解它们背后的概念。例如,我知道简单的对称密码可以用XOR实现。我在stackexchange上的一个线程中看到,你需要使用trapdoor函数,但我找不到太多关于它们的信息。我想说,取一组字节,并能够以某种方式将它们拆分,以获得公钥/私钥。我得到了共享秘密的想法。比方说,我生成随机数256(根本不是随机的:P),然后把它分成200和56。如果我用200做XOR运算,我只能用200来解密。我希望能够随机拆分数字,这样就能够不对称地进行拆分。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-26 08:55:54

好的,这只是一个简单的演示,基于加法/模运算。

假设我们有一个模数值,在我们的例子中是256。

  1. 。这是一个公知的常见值。
  2. 假设您生成了一个介于1-255之间的随机私钥,例如pri=133。将私钥保存在pocket.
  3. Generate中作为公钥,pub = 256 - pri = 123。您可以将此公钥(123)共享给全世界。想象一下,第三方不知道如何从公钥计算私钥。因此,他们只知道公钥(123)。
  4. 公众中的某个人想要给你发送一个加密的ASCII字节。他得到了他的字节,并通过模256运算将公钥添加到字节中:

encrypted = (input_value + pub) % modulto;

例如,我想以加密的形式向您发送字母"X",ASCII码= 88。所以,我计算:

代码语言:javascript
复制
(88 + 123) % 256 = 211;

  1. 我给你发送值为211的加密字节。
  2. 你用你的私钥用同样的方案解密它:

已解密= (input_value + pri) % 256 = (211 + 133) % 256 = 88;

当然,在这个例子中使用简单的生成对是很弱的,因为众所周知的从公钥生成私钥的算法,并且任何人都可以使用模和公钥轻松地恢复私钥。但是,在真正的密码学中,这种算法是未知的。但是,从理论上讲,它可以在未来被发现。

票数 30
EN

Stack Overflow用户

发布于 2013-09-26 08:38:40

这是一个纯数学的领域,有一本书叫“密码的数学”,它很简短,但却是一个很好的介绍。我建议你不要实现你自己的,特别是在Java中(你想要一个编译器,针对涉及到的那种数学问题针对真实的机器,并进行相应的优化)。你应该在数学或计算机科学堆栈交换上询问这一点。

我确实得到了反对票,所以我想澄清一下。我不是冷酷无情,但cyphers是坚定的数学领域,而不是编程(即使它是谨慎的数学,或comp-sci的数学方面)它需要对代数结构的良好理解,一些统计,这当然是一个迷人的领域,我鼓励你阅读。我的意思是,不要使用你制造的任何东西,“发明”这些密码的人已经忘记了比你或我知道的更多,最多实现他们所说的话。在Java中,顺便说一句,你应该预料到吞吐量会非常低。涉及寄存器压力和分配的优化在cypher吞吐量方面带来了巨大的红利。对于初学者来说,Java是基于堆栈的。

附录(约6年后)

Java现在已经在某些方面有所改进(我有一个编译器狂热,这是适当的怪异)然而,回过头来看我是对的,但由于某种错误的原因,Java更容易通过计时来攻击,我已经看到了依靠跟踪编译技术来找出正在使用的软件版本的一些很好的用法。它也真的很难处理幽灵,它不会很快消失(我喜欢缓存...现在我觉得这么说很下流)

然而,:最重要的是,不要自己这么做!使用它至多-它非常属于数学领域,我必须说它可能更好地在纸上完成,除非你喜欢欣赏一个到处都是数字的终端。

票数 4
EN

Stack Overflow用户

发布于 2013-09-26 08:39:34

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

是(整个)互联网所基于的标准

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19017419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档