java.security.NoSuchAlgorithmException:供应商SunJCE不提供DES/ECB/NoPadding

java.security.NoSuchAlgorithmException: Provider SunJCE does not provide DES/ECB/NoPadding

我正在尝试使用 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

我该怎么办,我尝试了很多方法来解决它,但总是出现同样的错误,我能找到一些代码在 [= 中执行 handler.decryptData 31=] 我能找到任何帮助吗...

JCEHandler handler = new JCEHandler("com.sun.crypto.provider.SunJCE");

您正在强制 JCE 提供商使用 SunJCE,它可能没有 DES/ECB/NoPadding 的相应加密实现,您可以尝试其他算法或使用 SpongyCastle 作为您的安全提供商。

更新: ECB模式已经被证明是弱的,你不应该使用ECB 模式。