我认为Tadmas下面给出的答案非常有帮助,我希望你们在下面破解/欺负我的实现。正如Tadmas指出的,我所有的数字都是40位(12位数字是10 ^
12,大约是2 ^ 40)。
我复制了sun.security.rsa.RSAKeyPairGenerator(链接),并为40位RSA算法创建了自己的生成器。标准之一需要512-1024位,因此我删除了它周围的输入检查。一旦我创建了一个合适的n,e,d值(按照alog,e似乎是65537)。以下代码很好用,
public void testSimple() throws NoSuchAlgorithmException { MyKeyPairGenerator x = new MyKeyPairGenerator(); x.initialize(40, new SecureRandom("password".getBytes())); MyPublicPrivateKey keypair = x.generateKeyPair(); System.out.println(keypair); BigInteger message = new BigInteger("167890871234"); BigInteger enpred = message.modPow(keypair.e, keypair.n); System.out.println(enpred); //gives some enpred value BigInteger depred = enpred.modPow(keypair.d, keypair.n); System.out.println(depred); //gives back original value}缺点
- 编码的不一定是12位数字(有时可能以0开头,这意味着只有11位数字)。我想总是在前面填充0零,并在开头添加一些CHECKSUM数字,这可以缓解此问题。所以总是13位数…
- 40位RSA的安全性比512位弱(不仅是512/40倍,而且是指数倍)。您能为我指出40位RSA与512位RSA相比有多安全的链接吗(我可以在Wiki中看到某些内容,但无法具体确认受到攻击的可能性)?关于概率/破解N的函数所需的RSA尝试次数/概率的任何链接(wiki?)(其中n是所使用的位数)将非常棒!



