【发布时间】:2014-02-13 03:51:21
【问题描述】:
我正在尝试使用我自己在 Java 中的 RSA 实现来加密和解密一个字符串,最终是一个包含明文的文件。我尝试在 SO 和网络上遵循无数示例,人们使用内置的 Java RSA 函数或他们自己的算法实现,但无法让它们中的任何一个工作,因为解密的文本与原始字符串不匹配.
我不知道我是否对文本的编码/解码做错了,我尝试在java.xml.* 中使用默认的 UTF-8 和 Base64 编码器,但也没有运气。我没有使用任何填充,我不知道它是否有必要工作,而且我只是使用任意密钥长度,我尝试改变它的大小,也没有使事情正常工作。这只是对我自己的一个练习,任何人的信息都不会受到这个或任何东西的保护。但我不确定问题是什么,所以这是我的代码,它试图加密/解密一个简单的字符串:
BigInteger ONE = new BigInteger("1");
SecureRandom rand = new SecureRandom();
BigInteger d;
BigInteger e;
BigInteger n;
BigInteger p = BigInteger.probablePrime(10, rand); // 10 is arbitrary, have tried different numbers
BigInteger q = BigInteger.probablePrime(10, rand);
BigInteger phi = (p.subtract(ONE)).multiply(q.subtract(ONE));
n = p.multiply(q); //10 bits * 10 bits = ??? bits for key length
e = new BigInteger("65537"); //public key exponent
d = e.modInverse(phi); //private key exponent
String string = "this is a test";
byte[] bytes = string.getBytes();
BigInteger plainText = new BigInteger(bytes);
BigInteger cipherText = plainText.modPow(e, n);
BigInteger originalMessage = cipherText.modPow(d, e);
System.out.println(string.getBytes());
System.out.println(cipherText);
System.out.println(originalMessage);
每次我运行我的程序时,输出对于所有三件事都有不同的值: 但它们始终是相同的相对形式:
[B@52d85409
157529
24312
【问题讨论】:
标签: java encryption encoding cryptography rsa