【问题标题】:What is API in OpenSSL like Java DES/CBC/PKCS5Padding?OpenSSL 中的 API 是什么,例如 Java DES/CBC/PKCS5Padding?
【发布时间】:2017-09-27 09:23:42
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    如果您正在使用 FIPS 版本的 OpenSSL 的 CentOS 计算机并且 FIPS 模式处于活动状态,那么您可能无法访问任何 DES 或 2-key 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 会导致一些问题。

    【讨论】:

    • 我用DES_ncbc_encrypt,它在解密用Java的DES/CBC/PKCS5Padding加密的密码时效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多