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

问题描述:

我想解密由javax.crypto.Cipher的“DES/CBC/PKCS5Padding”加密的密码。我必须使用OpenSSL来解密密码。我应该使用OpenSSL中的哪个API?什么是OpenSSL中的API,如Java DES/CBC/PKCS5Padding?

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

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

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

如果您正在使用FIPS版本为OpenSSL 的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会导致一些问题。

+0

我用'DES_ncbc_encrypt',和它运作良好,在解密将被Java的DES/CBC/PKCS5Padding加密密码。 – Edure