我正在尝试使用字母数字字符串并使用大整数对其进行加密。当我使用十进制值(例如10)初始化BigInteger时,我的加密和解密工作。但是当我使用字符串初始化BigInteger时,解密不会返回原始的BigInteger。 这是我用来生成密钥和加密/解密的代码。
public static void main(String args[]) {
int keySize = 32;
BigInteger prime1 = new BigInteger(keySize / 2, 100, new SecureRandom());
BigInteger prime2 = new BigInteger(keySize / 2, 100, new SecureRandom());
BigInteger n = prime1.multiply(prime2);
BigInteger totient = prime1.subtract(BigInteger.ONE).multiply(prime2.subtract(BigInteger.ONE));
//create the private key
BigInteger e;
do e = new BigInteger(totient.bitLength(), new SecureRandom());
while (e.compareTo(BigInteger.ONE) <= 0 || e.compareTo(totient) >= 0 || !e.gcd(totient).equals(BigInteger.ONE));
//create public key
BigInteger d = e.modInverse(totient);
String original = "Hello World!";
BigInteger enc = new BigInteger(original.getBytes());
System.out.println("Original: " + enc.toString());
//encrypt
enc = enc.modPow(e, n);
//decrypt
BigInteger dec = enc;
dec = dec.modPow(d, n);
System.out.println("Result: " + dec.toString());
}
正如我所说,如果我将enc初始化为整数值,比如10,我的结果将是...
Original: 10
Result: 10
然而,当我初始化为字符串时,就像上面的代码一样,我的结果就像这样......
Original: 22405534230753928650781647905
Result: 1828948854
我是否实施了加密错误,或者在将字符串转换为BigInteger加密时是否缺少某些内容?
答案 0 :(得分:3)
我是否实施了加密错误
是
看起来您正在使用32位keySize
实现RSA。这也将消息的大小限制为32位;您尝试加密的邮件远远大于此。