我正在尝试运行一个简单的加密/解密Android应用程序,并在Java中进行测试。我搜索过,但没有找到与我的问题相关的答案。
基本上,加密和解密在大多数情况下都有效,除了Java和Android中的解密后的文本与加密的原始文本略有不同。例如,how's it going?
在Java中解密为howsitgoing=
,在Android中解密为howsitgoAAAA
。
这是Java代码:
KeyStore ks = null;
try {
ks = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream is = new FileInputStream("./raw/./akeystore");
ks.load(is, "a".toCharArray());
} catch (Exception e) {
e.printStackTrace();
}
Certificate cert = ks.getCertificate("akeypaircer");
RSAPublicKey publicKey = (RSAPublicKey)cert.getPublicKey();
Cipher c = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
c.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] decodedString = Base64.decodeBase64("how's it going?".getBytes("UTF-8"));
byte [] cipher = c.doFinal(decodedString);
RSAPrivateKey privateKey = (RSAPrivateKey)ks.getKey("akeypair","a".toCharArray());
c.init(Cipher.DECRYPT_MODE, privateKey);
byte [] decrypted_cipher = c.doFinal(cipher);
byte[] encodedBytes = Base64.encodeBase64(decrypted_cipher);
System.out.println(new String(encodedBytes, "UTF-8"));
我假设它与字符编码有关,但我对此一无所知......
我也猜测Java和Android之间可能存在差异,因为我必须使用两种不同的密钥库类型(Android版本为BKS版,Java版本为JKS版)。
答案 0 :(得分:1)
这显然是错误的:
Base64.decodeBase64("how's it going?".getBytes("UTF-8"))
"how's it going?"
不是基本的64字符串,你不能对它进行64解码。如果您需要一个表示为字符串的密文,那么我们的想法是对密文进行64位编码。对于明文,您需要将字符串转换为字节。但是你已经通过编码将其作为UTF-8。
简而言之: