这是纯数学的一个领域,有一本书叫“密码的数学”,它很短,但很好的介绍。不过,我建议你远离实现自己的编译器,特别是在Java中(你想要一个编译器,它针对所涉及的数学类型,并相应地进行优化)。您应该在数学或计算机科学堆栈交换中询问此问题。
我确实得到了反对票,所以我想澄清一下。我不是无情的,但密码学牢牢地处于数学领域,而不是编程(即使它是谨慎的数学,或者comp-sci的数学方面),它需要对代数结构有很好的理解,一些统计学,这当然是一个迷人的领域,我鼓励你阅读。我的意思是上面,不要使用你做的任何东西,“发明”这些密码的人已经忘记了比你或我所知道的更多,实现他们最多所说的。在Java中,你应该期望一个非常差的吞吐量顺便说一句。涉及寄存器压力和分配的优化在密码吞吐量方面带来了巨大的回报。对于初学者来说,Java是基于堆栈的。
附录(约6年)
Java现在在某些领域已经有所改善(我有一个编译器的癖好,这很奇怪),但是回头看我是对的,但是由于各种错误的原因,Java更容易通过计时来攻击,我已经看到了依靠跟踪编译技术来计算出正在使用的软件版本。处理Spectre也非常困难,它不会很快消失(我喜欢缓存....我现在觉得这么说很脏)
但是:最重要的是,不要自己这样做!最多玩具 - 它非常在数学领域,我必须说它可能最好在纸上完成,除非你喜欢欣赏一个上面到处都是数字的终端。