我正在尝试使用Android中的org.jpos JCEHandler解密数据,如以下代码所示
public static byte[] decrypt(byte[] data, byte[] key, String algorithm) throws JCEHandlerException
{
byte[] plainText;
JCEHandler handler = new JCEHandler("com.sun.crypto.provider.SunJCE");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, algorithm);
plainText = handler.decryptData(data, secretKeySpec);
return plainText;
}
但捕获到异常,说提供程序SunJCE不提供
DES/ECB/NoPadding
我像下面的代码一样调用此函数
byteKey=Hex.decodeHex("abcdef0123456789".toCharArray());
Log.d("aabb","byteKey:"+byteKey);
TMK = Hex.decodeHex("abcdef0123456789".toCharArray());
byteKey = Crypto.decrypt(byteKey,TMK,"DES");
byteKey的日志为:
[B@1cbe2358
我应该怎么做,我尝试了很多方法来解决它,但是总是出现相同的错误,我可以在Android中找到某些代码执行与handler.decryptData相同的结果吗?
最佳答案
JCEHandler handler = new JCEHandler("com.sun.crypto.provider.SunJCE");
您正在强制JCE提供程序使用
SunJCE
,而DES/ECB/NoPadding
可能没有的相应加密实现,您可以尝试其他算法,也可以使用SpongyCastle作为安全提供程序。更新:ECB模式已经被证明是弱的,您不应该使用ECB模式。