Java: Different results when decoding base64 string with java.util.Base64 vs android.util.Base64
我正在使用客户端/服务器系统,并且正在尝试进行一些基本的加密。 当我连接到服务器时,我将公钥作为转义的字符串通过套接字发送。 我已经验证了字符串在两端,换行符和所有字符串上都是相同的。
在客户端(Android)上,我可以使用公钥/私钥成功加密和解密秘密密钥(出于测试目的)。 但是,当尝试将公共密钥从String解码为byte []时,服务器立即无法通过以下操作失败:
1 |
如果我理解正确的话,这似乎很荒谬,因为" a"绝对是base64字符。 客户端和服务器使用共享库来处理所有加密,因此代码几乎相同。 唯一的区别是对base64字符串进行编码/解码,因为java.util.Base64在Android上不可用。
共享类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public abstract class EasyCrypt { ... public PublicKey loadPublicKey(String key64) throws GeneralSecurityException { byte[] data = decode(key64); //Calls abstract methods, shown below X509EncodedKeySpec spec = new X509EncodedKeySpec(data); KeyFactory fact = KeyFactory.getInstance("RSA"); return fact.generatePublic(spec); } ... } |
客户端(Android)方法
1 2 3 4 5 6 7 8 9 10 11 12 |
}
服务器(Linux)方法
1 2 3 4 5 6 7 8 9 10 11 12 |
}
在android上,使用
1 2 3 4 | @Override protected String encode(byte[] bytes) { return Base64.encodeToString(bytes, Base64.NO_WRAP); } |
代替