Tag: 确定性

“无法重现” – Java确定性multithreading是否可能?

这是否可以以确定的方式运行multithreadingJava应用程序? 我的意思是在我的应用程序的两个不同运行中始终使用相同的线程切换。 原因是在每次运行中以完全相同的条件运行模拟。 类似的情况是当使用随机数发生器获得总是相同的“随机”序列时,给出一些任意种子。

Java中的确定性RSA加密

这是我在这个网站上的第一个问题,我对RSA只有基本的数学理解,所以请耐心等待! 🙂 我正在为大学的最后一年项目编写一个Java Web应用程序。 这是一个基于网络的“Pret-a-voter”实施,这是一个安全的投票系统,适用于那些听过它的人。 基本上我的问题是我希望能够给某人履行审计员的角色: 源字节数组(要加密的明文) RSA公钥文件 一个“ 目标 ”字节数组,这是我自己计算明文和公钥的密码数据的结果 然后,我希望审计员能够使用前两项执行加密,并确信第三项是结果。 因此,我需要加密是确定性的 ,即每次重复使用相同的明文和公钥加密时生成相同的密码数据。 (注意 – 我正在使用这个项目中的非常小的数据块 – 根本没有涉及对称加密……我知道这是RSA的“有趣”使用!) 无论如何,我发现在Java中,使用 cipher = Cipher.getInstance(“RSA”); 使用默认的随机填充方案,成本为11个字节(因此,对于2048位密钥对,可以加密2048 / 8-11 = 245个字节)。 对同一明文的重复加密会产生不同的密文,这显然不是我想要的ECB模式。 我的问题是 – 我应该使用以下内容吗? cipher = Cipher.getInstance(“RSA/ECB/NoPadding”); 我已经在很多地方看到RSA没有填充而不安全。 这仅仅是因为攻击者可以建立明文/密文字典吗? 这是我需要的确定性加密的副作用,以便允许审核员validation我的加密,并且在我的方案中,审核员是可信的 ,这样就可以了。 我的问题的第二部分是与java相关的。 如果我确实如上所述使用RSA / ECB / NoPadding,我相信我能够提供(例如)长度128(对于1024位RSA密钥对)的源字节数组并加密以获得另一个长度的字节数组128.如果我再次尝试使用不同的1024长度公钥加密,我得到 javax.crypto.BadPaddingException:消息大于模数 有谁知道为什么? 编辑 – 使用NoPadding加密并不总是会产生这种exception – 这是一种性情。 但是,即使加密不会生成此exception,解密也会生成: javax.crypto.BadPaddingException:数据必须以零开头 非常感谢您阅读本文! […]