2

我正在尝试在 Java 服务器和 Android 客户端之间做一些加密。经过一番研究,和

这是我的加密设置:

public static String encryptionAlgoirthm = "DES";
public static short encryptionBitCount = 128;
public static String hashingAlgorithm = "PBEWithMD5AndDES";
public static short hashingCount = 512;
public static String cipherTransformation = "DES/CBC/PKCS5Padding";

但是当尝试在我的 CentOS VPS 上运行服务器时,我得到以下信息:

Algorithm [PBEWithMD5AndDES] of type [SecretKeyFactory] from provider [gnu.javax.security.auth.callback.GnuCallbacks: name=GNU-CALLBACKS version=2.1] is not found.

这是代码:

    KeySpec keySpec = new PBEKeySpec(EncryptionSettings.password, EncryptionSettings.salt, EncryptionSettings.hashingCount, EncryptionSettings.encryptionBitCount);
    SecretKey tmpKey = null;

    try
    {
        tmpKey = SecretKeyFactory.getInstance(EncryptionSettings.hashingAlgorithm).generateSecret(keySpec);
    }
    catch (final InvalidKeySpecException e)
    {
        Console.writeFatalError("Unable to generate key: invalid key specification");
    } 
    catch (final NoSuchAlgorithmException e)
    {
        Console.writeFatalError("Unable to generate key: encryption algorithm not supported - " + e.getMessage());
    }

我该如何解决?

4

1 回答 1

1

看起来您正在使用 GNU JRE,但其中没有 JCE。您可以通过下载充气城堡JCE 并将其添加为提供程序来解决此问题;

Security.addProvider(new BouncyCastleProvider());

另请注意,您encryptionBitCount看起来很可疑,因为 DES 具有 56 位的固定密钥。

DES 和 MD5 被认为已过时,您可能想尝试使用 AES 作为密码,而使用 SHA 作为散列。充气城堡 API 提供了一种PBEWITHSHAAND128BITAES-CBC-BC可以解决问题的算法。

于 2012-01-10T12:32:49.703 回答