什么是OpenSSL中的API,如Java DES / CBC / PKCS5Padding?

时间:2017-09-27 09:23:42

标签: java c openssl password-encryption encryption-symmetric

我想要解密由" DES / CBC / PKCS5Padding"加密的密码。 javax.crypto.Cipher。我必须使用OpenSSL来解密密码。我应该使用OpenSSL中的哪个API?

我知道DES3的API是DES_ede3_cbc_encrypt,并想知道DES。

1 个答案:

答案 0 :(得分:1)

您还应该使用EVP_*个功能;而不是像DES_ede3_cbc_encrypt(和朋友)这样的功能。请参阅OpenSSL wiki上的EVP Symmetric Encryption and Decryption

要回答有关DES符号的问题,您需要使用EVP_des_XXX,其中XXX是您感兴趣的模式。我猜你想要EVP_des_cbc

如果您正在使用FIPS版本的OpenSSL FIPS模式处于活动状态的CentOS计算机,那么您可能无法访问任何DES或2键3DES算法(3-关键3DES应该可用。)

$ cd openssl
$ grep EVP_des include/openssl/evp.h
const EVP_CIPHER *EVP_des_ecb(void);
const EVP_CIPHER *EVP_des_ede(void);
const EVP_CIPHER *EVP_des_ede3(void);
const EVP_CIPHER *EVP_des_ede_ecb(void);
const EVP_CIPHER *EVP_des_ede3_ecb(void);
const EVP_CIPHER *EVP_des_cfb64(void);
const EVP_CIPHER *EVP_des_cfb1(void);
const EVP_CIPHER *EVP_des_cfb8(void);
const EVP_CIPHER *EVP_des_ede_cfb64(void);
const EVP_CIPHER *EVP_des_ede3_cfb64(void);
const EVP_CIPHER *EVP_des_ede3_cfb1(void);
const EVP_CIPHER *EVP_des_ede3_cfb8(void);
const EVP_CIPHER *EVP_des_ofb(void);
const EVP_CIPHER *EVP_des_ede_ofb(void);
const EVP_CIPHER *EVP_des_ede3_ofb(void);
const EVP_CIPHER *EVP_des_cbc(void);
const EVP_CIPHER *EVP_des_ede_cbc(void);
const EVP_CIPHER *EVP_des_ede3_cbc(void);
const EVP_CIPHER *EVP_desx_cbc(void);
const EVP_CIPHER *EVP_des_ede3_wrap(void);

以下是我为OpenSSL和Java互操作提供的一些参考资料。通常EVP_BytesToKey会导致一些问题。