繁体   English   中英

使用OpenSSL C ++库和PHP不一致的Blowfish加密数据

[英]Inconsistent Blowfish encrypted data with OpenSSL C++ library and PHP

我正在尝试开发一个C ++程序,该程序可以加密一些数据,以便以后使用基于PHP的Web服务进行解密。 但是,我在通过PHP中使用openssl_decrypt()方法使用Blow-fish CBC方法使用PHP解密数据时遇到了麻烦。

我正在测试此代码C ++代码以加密消息并转换为base64格式以使用我的PHP程序解密。 这是C ++程序的代码。

#include <secureinfra.hpp>
#include <iostream>

int main()
{
    cout << "Unit Test for the crypto system" << endl;
    SecureInfrastructure mySec;

    /* A 256 bit key and IV */
    auto *key = (unsigned char *)"ZdOAq0yn6H1i35TywbLrtqBO4NCjh7Vh";
    auto *iv = (unsigned char *)"01234567";

    /* Message to be encrypted */
    auto *plaintext = (unsigned char *)"The quick brown fox jumps over the lazy dog";

    /* Buffer for ciphertext. Ensure the buffer is long enough for the ciphertext which may be longer than the
     * plaintext, depending on the algorithm and mode. */
    unsigned char ciphertext[128];

    /* Buffer for the decrypted text */
    unsigned char decryptedtext[128];
    int decryptedtext_len, ciphertext_len;

    /* Encrypt the plaintext */
    ciphertext_len = mySec.EncryptMessage(plaintext, strlen((char *) plaintext), key, iv, ciphertext);

    /* Decrypt the ciphertext */
    decryptedtext_len = mySec.DecryptMessage(ciphertext, ciphertext_len, key, iv, decryptedtext);

    /* Add a NULL terminator. We are expecting printable text */
    decryptedtext[decryptedtext_len] = '\0';

    /* Show the encrypted and decrypted text in base64 format */
    string encryptedText = mySec.base64_encode(string(reinterpret_cast<char*>(ciphertext)));
    cout << "Encrypted text (base64) is:\n" << encryptedText << endl;
    cout << "Decrypted text (base64) is:\n" << mySec.base64_encode(string(reinterpret_cast<char*>(decryptedtext))) << endl;

    /* Show the decoded decrypted text */
    cout << "Decoded Decrypted text is:" << endl;
    cout << decryptedtext << endl;

    return 0;
}

我的仅用于解密的PHP测试代码如下所示:

<?php
$ciphertext = "ljRvLcfBiDwxRSm1lDXMwDk5S4pRCg9D2F9jxR5C5yy79xoBHQNKjA/FaQ2dNfKvyO0uilZ/";
$key = "ZdOAq0yn6H1i35TywbLrtqBO4NCjh7Vh";
$cipher = "bf-cbc";

if (in_array($cipher, openssl_get_cipher_methods()))
{
    $ivlen = openssl_cipher_iv_length($cipher);
    $iv = "01234567";
    // print some parameters
    echo "IV size: ".strlen($iv)."\n";
    echo "Key Used: ".$key."\n";
    echo "Enc Message: ".$ciphertext."\n";
    // Now try to decrypt message...
    $original_plaintext = openssl_decrypt($ciphertext, $cipher, $key, $options=0, $iv);
    echo "Dec Message: ".$original_plaintext."\n";
}
else
{
    echo "The ".$cipher." is not present in the system...";
}
?>

但是,PHP程序无法解密由我的C ++程序生成的$密文。 当我尝试回显$ original_plaintext时,它什么也没显示。

另外,我注意到使用SSL的PHP​​和C ++加密有所不同。 例如,当我尝试使用相同的密钥和IV用PHP(使用openssl_encrypt方法)和C ++来加密短语“快速的棕色狐狸跳过懒狗”时,加密的base64字符串如下所示:

在C ++中:
ljRvLcfBiDwxRSm1lDXMwDk5S4pRCg9D2F9jxR5C5yy79xoBHQNKjA / FaQ2dNfKvyH3brAV /

在PHP中:
hWj7F1fnBXhIWv4sonjhSmJgHWJALFecxxrGe0T1kLrN4TfSMUw / uELj6h5 + Laph

我该如何解决? 我看到了类似的帖子,描述我需要在C ++程序上设置密钥大小,但是我不确定如何正确执行此操作。

编辑:这是在C ++中加密消息的方法

int SecureInfrastructure::EncryptMessage(unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *iv, unsigned char *ciphertext)
{
    EVP_CIPHER_CTX *ctx;
    int len, ciphertext_len;

    /* Create and initialise the context */
    if(!(ctx = EVP_CIPHER_CTX_new())) {
        handleErrors();
    }

    /* Initialise the encryption operation. IMPORTANT - ensure you use a key and IV size appropriate for your cipher. */
    if(1 != EVP_EncryptInit_ex(ctx, EVP_bf_cbc(), nullptr, key, iv)) {
        handleErrors();
    }

    /* Provide the message to be encrypted, and obtain the encrypted output. EVP_EncryptUpdate can be called multiple
     * times if necessary */
    if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len)) {
        handleErrors();
    }
    ciphertext_len = len;

    /* Finalise the encryption. Further ciphertext bytes may be written at this stage. */
    if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) {
        handleErrors();
    }
    ciphertext_len += len;

    /* Clean up */
    EVP_CIPHER_CTX_free(ctx);
    return ciphertext_len;
}

EDIT2:现在是我的新EncryptMessages,其中包含您的建议:

int SecureInfrastructure::Encrypt_BF_CBC(unsigned char *plaintext, int plaintext_len, unsigned char *key, unsigned char *iv, unsigned char *ciphertext)
{
    EVP_CIPHER_CTX *ctx;
    int len;
    int ciphertext_len;

    /* Create and initialise the context */
    if(!(ctx = EVP_CIPHER_CTX_new())) {
        handleErrors();
    }

    /* Initialise the encryption operation with fixed key size */

    EVP_EncryptInit_ex(ctx, EVP_bf_cbc(), NULL, NULL, NULL);
    EVP_CIPHER_CTX_set_key_length(ctx, 32);
    EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv);

    /* Provide the message to be encrypted, and obtain the encrypted output. */
    if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len))
        handleErrors();
    ciphertext_len = len;

    /* Finalise the encryption. */
    if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len))
        handleErrors();
    ciphertext_len += len;

    /* Clean up */
    EVP_CIPHER_CTX_free(ctx);

    return ciphertext_len;
}

用于Base64编码的方法:

std::string base64_encode(const std::string& in) { 
    string out; 
    int val = 0, valb = -6; 
    for (unsigned char c : in) { 
        val = (val << 8) + c; 
        valb += 8; 
        while (valb >= 0) { 
            out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(val >> valb) & 0x3F]); 
            valb -= 6; 
        } 
    } 
    if (valb > -6) out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[((val << 8) >> (valb + 8)) & 0x3F]); 
    while (out.size() % 4) out.push_back('='); 
    return out; 
}

我是一名PHP开发人员,因此不能在C ++方面发表过多评论。

但是,我已经用PHP 7.2.10对此进行了测试,并且得到了相同的结果。

如果将$ciphertext交换$ciphertext您赋予hWj7F1fnBXhIWv4sonjhSmJgHWJALFecxxrGe0T1kLrN4TfSMUw/uELj6h5+Laph然后执行脚本,它将确实为您提供:

“敏捷的棕色狐狸跳过了懒狗”

因此,您的PHP脚本完全没有问题。

问题在于,就PHP中的解密实现而言,您提供的哈希(由C ++程序生成)是不正确的。 如果您这样做var_dump($original_plaintext); 在PHP脚本中,它返回false,这证实了这一点。

您的C ++程序告诉它使用河豚CBC的下落? 我可以使用$cipher在PHP脚本中看到您在哪里进行了此操作,但在C ++中却看不到。

PHP中没有单个密码方法可以为您提供该哈希值。 作为测试,请使用以下脚本,该脚本显示方法名称(来自openssl_get_cipher_methods() )和哈希值:

<?php
error_reporting(E_ALL);
$methods = openssl_get_cipher_methods();
foreach ($methods as $method) {
    echo $method . "\n";

    echo openssl_encrypt("The quick brown fox jumps over the lazy dog", $method, "ZdOAq0yn6H1i35TywbLrtqBO4NCjh7Vh", 0, "01234567");

    echo "\n\n----\n\n";
}
?>

输出:

AES-128-CBC
CFqD8KvYNNSLRRH5leJm9jLq4japdiZODU959rRx4E1IyGcpCfG9VezF0IdsWPDy

----

AES-128-CBC-HMAC-SHA1
CFqD8KvYNNSLRRH5leJm9jLq4japdiZODU959rRx4E1IyGcpCfG9VezF0IdsWPDy

----

AES-128-CBC-HMAC-SHA256
CFqD8KvYNNSLRRH5leJm9jLq4japdiZODU959rRx4E1IyGcpCfG9VezF0IdsWPDy

----

AES-128-CFB
Kjdp5YLSCjWqYRPiWAi7vWJt3ui+NZnJXSL4dBdNEaIWyK2AeQIm2If0Mg==

----

AES-128-CFB1
PsQSrHSFqXuZVZgtNXMSvwsdhhmxfw2MJgPmf/I++n1jmb0QZfRpSulHCg==

----

AES-128-CFB8
KmQC+qe1l5iIeQk4MdBwkQlzvcmNCZH3EhxCCP1P7I2CrZAjE0G0NDQ24Q==

----

AES-128-CTR
Kjdp5YLSCjWqYRPiWAi7vVxK24U+JACgW6KCrbnVwTBQrBy/dUPI6RxNag==

----

AES-128-ECB
TGwrUkmBrlam+I/4nL/KXXILZKdb5FKDpo+BSYMYe+z90MSzX75nkQXhRund4wCF

----

AES-128-OFB
Kjdp5YLSCjWqYRPiWAi7vV7oblWo5p+Us1m5FA0+R8nb7EE3cOXI6O7RCg==

----

AES-128-XTS
Ofhfg4ruiwKduK+6wC01olTA4XVY90bFBYfd+0QJgqs6O2OKrhhd3gRWMQ==

----

AES-192-CBC
9PoANX4yywNkBNFCcX++qXST7xumUwIU0BIAwe4npwLNmeSC7MsYOsawg/+RztyV

----

AES-192-CFB
wjxuTYax9f6jWWvKmidXvucLDzRNR/l5srv5KKVIPphruAhPnKQ23+Vspw==

----

AES-192-CFB1
6jB9HioMtoi3MZky0B8M01W1l2SqR6ZvtL3I8WEClcIdMXYFnjdP50o2Nw==

----

AES-192-CFB8
wvw3vpDpqPTInjIuFEAhWwKlwrekcpc4Q7X7ApRKjHT1a+WDkME7Hz/u3A==

----

AES-192-CTR
wjxuTYax9f6jWWvKmidXvibXdkK8UNq9ZX8bAsh6OcN1jD2UcFHuf0X5IA==

----

AES-192-ECB
bAzuDIkfDbJNXkWNtovgH3UPoh+jRoq1kUxfomAHMPGxDbBWc4bDDrrEvWHkTqYM

----

AES-192-OFB
wjxuTYax9f6jWWvKmidXvspHO1k5ImnLwNgWM+lB6brfjPT78myhmkK35w==

----

AES-256-CBC
jLxnUq0bKY2//CwBFeZoqy3u7s8E7aQ0PEm/5vPHR4/a2TVylXu5n2o2x7pu8SRq

----

AES-256-CBC-HMAC-SHA1
jLxnUq0bKY2//CwBFeZoqy3u7s8E7aQ0PEm/5vPHR4/a2TVylXu5n2o2x7pu8SRq

----

AES-256-CBC-HMAC-SHA256
jLxnUq0bKY2//CwBFeZoqy3u7s8E7aQ0PEm/5vPHR4/a2TVylXu5n2o2x7pu8SRq

----

AES-256-CFB
9cmTuo3iisXBbJzWFWCmgl/7mZ20LODkcqP+GNf7r9zzJy7pskvGE3h8+Q==

----

AES-256-CFB1
y0D9Yj1ymwYVIrQx64nehgeoydPk9xB++McXmSz4lfZbNcBgL0fnlCxvNA==

----

AES-256-CFB8
9bXhDvqzPRmHQ7+8qpp7CxetEMKFzq8FsBJgdcVZPZ+Xno11RbD+l8wAwg==

----

AES-256-CTR
9cmTuo3iisXBbJzWFWCmgqyMguKt3NJv/vh9Z+E/5o7jbmGIjLZKA7+QRg==

----

AES-256-ECB
Xe6luPVXEqvvTVEfNuO281ofcW+uV682D4fYYIyA7KHDcQkVHi647wSFaXqIxwZP

----

AES-256-OFB
9cmTuo3iisXBbJzWFWCmgvMTTvnu1bC8K4cxVlI7G3wxZw6H/z/OU8fUSg==

----

AES-256-XTS
7sP5mx9ES7JypAiqeC+ZXvu70gnNnOiPGMFRhwh14xNZiXRX2/FUTEYKLA==

----

BF-CBC
hWj7F1fnBXhIWv4sonjhSmJgHWJALFecxxrGe0T1kLrN4TfSMUw/uELj6h5+Laph

----

BF-CFB
DtWBgA7jjoOOCHfIg+EvlWURlgrbYWM/001bn4xRbvo9r8sOoOdSAzoTsA==

----

BF-ECB
GEPm0Nw/TGb9XI00QGbMOZhSltrgjLQLcS1rjyLB+Ti8DTfIoDmkvJGqAyoJd0LY

----

BF-OFB
DtWBgA7jjoPFFmYP7IlPTkdCaP+8eY/rgB0M/12zCLTqPHerQV77Ar8L+g==

----

CAMELLIA-128-CBC
iVUMSil3yWiIY9go7atWvrd/mSOtQPKmPnoxYg+B7pwevLuC0Y5RLchGEGn0cgZb

----

CAMELLIA-128-CFB
6HYrCV2MPk3sn3oNWm0xLQarvqJ2dSgRDU/1N0tP0HnA4X+XYEvjd4d7ug==

----

CAMELLIA-128-CFB1
rsMnrvOE/y0VIFH0/SVB5FJG6X6sK6ads+TiH9UM2X42U+hRbqIRT+cdgg==

----

CAMELLIA-128-CFB8
6NRTf6JBm71uVIZzK1DLr799SKaD3UxT5cPFne3xSFuWPb9Mnn2riFz6oA==

----

CAMELLIA-128-ECB
espelBrXu4iWaxp2RZSLPyoSlck4G6ylQYHcu6zITMhmV9sMTEcUcKlZP71HYhQr

----

CAMELLIA-128-OFB
6HYrCV2MPk3sn3oNWm0xLbgO3psDlQMt7zbaA/coaJvIVJqzAaSaY6BSgA==

----

CAMELLIA-192-CBC
uz9Z+IX+P+CpQLBepmI3A9rU6Wcg1CsikKYglNU4SY3hlVOsT6PXD+hKXOobioPZ

----

CAMELLIA-192-CFB
trJ5LHzk0Y/T2TCcR6/daZ78aDxU1dJgRA6+VXU1uqFQovtUo0QRrgiCZg==

----

CAMELLIA-192-CFB1
7LLnnwpBpBkaFXrWw5qegx8KVvEgV2/VR362V5Z43qNJVPzzdvmcFjv9Vg==

----

CAMELLIA-192-CFB8
tiogUjGFA+o7MOCoACibq7PfIaV4Pgj2Js4La4SqAn6262b7b4AAfvUDbQ==

----

CAMELLIA-192-ECB
sn9QfT8PQrMrNxAR9pBT3QVNLdOyhYLKBb1joqmoOW7wzJZ7zW7P070ErkJPkMYU

----

CAMELLIA-192-OFB
trJ5LHzk0Y/T2TCcR6/dafYXU4/u9aln1U/6GzytlRC8Onnw54/t5/slvA==

----

CAMELLIA-256-CBC
Klj37OGl6nexwkw5ZgKSUgTQvAubQYKQeMjX2jMA0LDhaAxr38y91bU3dCwV6xYt

----

CAMELLIA-256-CFB
xlQLgvFHyLYmrl3plKqarQUU8dYdC0Qt0dKg6Z38KQGl0yoh5jIPtzIluA==

----

CAMELLIA-256-CFB1
gxGv92PY0eNcmtYGvdeGKveygkiBiejcckETUkVAVbYXiZO6xvFYnETR0Q==

----

CAMELLIA-256-CFB8
xjARmxeN+O730AwGfWzJaHReUxu28PAzniDHh99SFKnwAww9Iy5wtbpsCg==

----

CAMELLIA-256-ECB
M/P3GH8xSUn4bPPmD7rKupqYS6VG8nSsW65PmvuzZ7L4PJtaOGLMpqx72Wo2F2F1

----

CAMELLIA-256-OFB
xlQLgvFHyLYmrl3plKqardbHfL3lWaw0Ki9U5svO8pXQgTzUJ0jibbOI/g==

----

CAST5-CBC
/XDmMTtfxYk5R+zx0Qg9B0ohoAT0kr/lRJB0OIiM7PlQqMDhM/bH2iF59qYPWn8F

----

CAST5-CFB
qjxQUjVCFHtoSyLDOL6BYUGggJ95TJn0zPD/jevMKetvCjfCOOvWHvmBOw==

----

CAST5-ECB
JZiSJA0Sgs6A+x5U0pffRC/cMgWmHEMptZ4JrLQ5rCvNhLj65aQryWDJDRtesuk3

----

CAST5-OFB
qjxQUjVCFHs3AVHEDgPNF7R40LDHvYDeXna+4QIFWETaoBOplIIcW5BN5g==

----

DES-CBC
VTSvIBHq5AqT3GZ7J3qEt1CGwYCCk7gUpyBTLhgC4kqXdzaOs2TuekAIhmRyZZ9Y

----

DES-CFB
Z6znWp6g7hyOaZpvk9+24Vls+6JaUA+sgIR9h0bWAlqby7oR/fX4k2wy1A==

----

DES-CFB1
fpU6lGqFl6kkQtXuv6XM112vT2CIVEV9iTnSkXd+Zrk7T065215LqO+nzA==

----

DES-CFB8
Z2cEx6sPTs5lDZRq8Ejp2zhR8JbdcoqdKMTHDHA/Q5QA8/B036OKVr3QkQ==

----

DES-ECB
VegFycZ1wAWwrzv0AhpJQ6mFzWr+SK6ecIyqN8iBXfFtXa3eE/4+iSKCEBXCdEfj

----

DES-EDE
bb85G6G8tchhxlIYF8vLpcChFtSC7Iuyywn4tssj7LP/8PHdTWZWKOJDN8NsY3Kw

----

DES-EDE-CBC
0nWlfDQeBtrWN2xZ1JqPl+fTeTfdrp2/bBWFTtpMcsV1Btz8UaN/YPHJ45/qJlrI

----

DES-EDE-CFB
sQ4TEmNrEW2T6C0wYabfGaYpwg69dOE9EZXzA7qt0JGctgiSzXwq3HT11w==

----

DES-EDE-OFB
sQ4TEmNrEW2mZc8ckaETVTWG+AFgiyykc68CWoiwNxuRYyVDCnrYvGS/WQ==

----

DES-EDE3
dzCgZyS9ovD+632p+bJy476BXmaNAKj8qA9xAClHrIgDyaQ0aOhLgFQU9dk7XItN

----

DES-EDE3-CBC
fAngoyT1z6mLk/y1068+0Zr2293p+4K7/JoQu5KRu3WgQJTRVim36ozjqNNIgfbX

----

DES-EDE3-CFB
MTLC8HyTQSkN/kYpDKSnsmFTU2IoW7rQIPMiOKIOiuZiFiYtEULxMyB6iw==

----

DES-EDE3-CFB1
TIfIZ6hK04UUu4IpMeKO/oLDVk3bEVCk2aKlqr7+E2f67NIHsjngE2L7vQ==

----

DES-EDE3-CFB8
MbhxUUq79mYdxFOVcnbM6KqxUOtaeh7tcZSlPsLOOqZrLpTnrlp7HQr92w==

----

DES-EDE3-OFB
MTLC8HyTQSlb6rJ3ranhIqHDnnjplmPB4Ag4asjmyCd8hmMCsWWCpBbXnQ==

----

DES-OFB
Z6znWp6g7hw9YCEYjN1RHjBi6ijkmuQgrI/Q+jywb+cqqm0Zf0p4iunYcg==

----

DESX-CBC
BNP57o24ysgLFrV6f1XHdEdGj3UcGKjepGDs3598A0BiJPpWKhmd4jvYEtIivZXG

----

IDEA-CBC
42f/2g3A7kdWcOe0+OPxcmQPw5Lmazis0nUAJeIzEVVKSkEsW7cDH5fU9z63XY3o

----

IDEA-CFB
ZWg7X3EGMf+FHesNqcZWANkaoW5mPIx4xvTlRqOhcLcDZ9PTF60BqpTTyQ==

----

IDEA-ECB
i+ncikDw1gXTz2wk7iYvlPJaTQfNshfcUcXDhHF7ud4tA3WE4VhBy43MD7u5BIbm

----

IDEA-OFB
ZWg7X3EGMf/fuZ41IQJ+pXIBIu1t5NK81CHarFwPNMFQRFZDAKZi6Vnqyw==

----

RC2-40-CBC
VwYhijuReEDe5vAg51O595EBrjsxWJCvP8iTqp/jqYXVwu/+CmRcNVBo4VX8KpqG

----

RC2-64-CBC
dfo5jOCLZwpSzZE8J1tDKFpwT/6hq6FFjIeeJAufBDanaAFwoDgw5lIaEfHnMbgK

----

RC2-CBC
6kBBW+RF/CbfGWb3/FBmWXz6tSyShVRI3rMoe+YrdkD/CVH/nav9Iz1z46ea/pVa

----

RC2-CFB
g6fHk/fDwnmyHgkxDhcS8uw1MeVYMoTCHc2CxvO07JIiSIa6NuMtJSSuzg==

----

RC2-ECB
RxgWGpaR8wN0KJwTsc6QfEuiqugj9Y0ijqOf2UBuIV1iItfLFqvz8vAyQFkk0gVo

----

RC2-OFB
g6fHk/fDwnnKQZxb5Kj/TvEWj1UNtZYBQGJwVgl/RsNcFR3iilMcW3GKtQ==

----

RC4
zAi3M6pkRBrBrYRy2p+bZ/xOt7dRyfZ/Bp7s0iHfIbPgS2mJij0ll/3V7g==

----

RC4-40
zAi3M6pkRBrBrYRy2p+bZ/xOt7dRyfZ/Bp7s0iHfIbPgS2mJij0ll/3V7g==

----

RC4-HMAC-MD5
zAi3M6pkRBrBrYRy2p+bZ/xOt7dRyfZ/Bp7s0iHfIbPgS2mJij0ll/3V7g==

----

SEED-CBC
MpmWEqpktFNCFlSsRK67o/g8DmUOOCGhiDPSn/zNiRW9Og92hk2BpSpll1TthmY0

----

SEED-CFB
kpvPjDQ4fDAWRde/njkfbmfCdvirZXihMyrpPmpVObIhXai8MEpB3WQdnA==

----

SEED-ECB
Pq5Bdxh1ntX6tW6Vn3QmALx87r6XMGh2O0+lUfbuFYRXblENBn6JIcNp92dutdwk

----

SEED-OFB
kpvPjDQ4fDAWRde/njkfbn8vdtv60gIh96cuJA0LhTuN+UXoZ/9gIw9hNA==

----

aes-128-cbc
CFqD8KvYNNSLRRH5leJm9jLq4japdiZODU959rRx4E1IyGcpCfG9VezF0IdsWPDy

----

aes-128-cbc-hmac-sha1
CFqD8KvYNNSLRRH5leJm9jLq4japdiZODU959rRx4E1IyGcpCfG9VezF0IdsWPDy

----

aes-128-cbc-hmac-sha256
CFqD8KvYNNSLRRH5leJm9jLq4japdiZODU959rRx4E1IyGcpCfG9VezF0IdsWPDy

----

aes-128-ccm


----

aes-128-cfb
Kjdp5YLSCjWqYRPiWAi7vWJt3ui+NZnJXSL4dBdNEaIWyK2AeQIm2If0Mg==

----

aes-128-cfb1
PsQSrHSFqXuZVZgtNXMSvwsdhhmxfw2MJgPmf/I++n1jmb0QZfRpSulHCg==

----

aes-128-cfb8
KmQC+qe1l5iIeQk4MdBwkQlzvcmNCZH3EhxCCP1P7I2CrZAjE0G0NDQ24Q==

----

aes-128-ctr
Kjdp5YLSCjWqYRPiWAi7vVxK24U+JACgW6KCrbnVwTBQrBy/dUPI6RxNag==

----

aes-128-ecb
TGwrUkmBrlam+I/4nL/KXXILZKdb5FKDpo+BSYMYe+z90MSzX75nkQXhRund4wCF

----

aes-128-gcm


----

aes-128-ofb
Kjdp5YLSCjWqYRPiWAi7vV7oblWo5p+Us1m5FA0+R8nb7EE3cOXI6O7RCg==

----

aes-128-xts
Ofhfg4ruiwKduK+6wC01olTA4XVY90bFBYfd+0QJgqs6O2OKrhhd3gRWMQ==

----

aes-192-cbc
9PoANX4yywNkBNFCcX++qXST7xumUwIU0BIAwe4npwLNmeSC7MsYOsawg/+RztyV

----

aes-192-ccm


----

aes-192-cfb
wjxuTYax9f6jWWvKmidXvucLDzRNR/l5srv5KKVIPphruAhPnKQ23+Vspw==

----

aes-192-cfb1
6jB9HioMtoi3MZky0B8M01W1l2SqR6ZvtL3I8WEClcIdMXYFnjdP50o2Nw==

----

aes-192-cfb8
wvw3vpDpqPTInjIuFEAhWwKlwrekcpc4Q7X7ApRKjHT1a+WDkME7Hz/u3A==

----

aes-192-ctr
wjxuTYax9f6jWWvKmidXvibXdkK8UNq9ZX8bAsh6OcN1jD2UcFHuf0X5IA==

----

aes-192-ecb
bAzuDIkfDbJNXkWNtovgH3UPoh+jRoq1kUxfomAHMPGxDbBWc4bDDrrEvWHkTqYM

----

aes-192-gcm


----

aes-192-ofb
wjxuTYax9f6jWWvKmidXvspHO1k5ImnLwNgWM+lB6brfjPT78myhmkK35w==

----

aes-256-cbc
jLxnUq0bKY2//CwBFeZoqy3u7s8E7aQ0PEm/5vPHR4/a2TVylXu5n2o2x7pu8SRq

----

aes-256-cbc-hmac-sha1
jLxnUq0bKY2//CwBFeZoqy3u7s8E7aQ0PEm/5vPHR4/a2TVylXu5n2o2x7pu8SRq

----

aes-256-cbc-hmac-sha256
jLxnUq0bKY2//CwBFeZoqy3u7s8E7aQ0PEm/5vPHR4/a2TVylXu5n2o2x7pu8SRq

----

aes-256-ccm


----

aes-256-cfb
9cmTuo3iisXBbJzWFWCmgl/7mZ20LODkcqP+GNf7r9zzJy7pskvGE3h8+Q==

----

aes-256-cfb1
y0D9Yj1ymwYVIrQx64nehgeoydPk9xB++McXmSz4lfZbNcBgL0fnlCxvNA==

----

aes-256-cfb8
9bXhDvqzPRmHQ7+8qpp7CxetEMKFzq8FsBJgdcVZPZ+Xno11RbD+l8wAwg==

----

aes-256-ctr
9cmTuo3iisXBbJzWFWCmgqyMguKt3NJv/vh9Z+E/5o7jbmGIjLZKA7+QRg==

----

aes-256-ecb
Xe6luPVXEqvvTVEfNuO281ofcW+uV682D4fYYIyA7KHDcQkVHi647wSFaXqIxwZP

----

aes-256-gcm


----

aes-256-ofb
9cmTuo3iisXBbJzWFWCmgvMTTvnu1bC8K4cxVlI7G3wxZw6H/z/OU8fUSg==

----

aes-256-xts
7sP5mx9ES7JypAiqeC+ZXvu70gnNnOiPGMFRhwh14xNZiXRX2/FUTEYKLA==

----

bf-cbc
hWj7F1fnBXhIWv4sonjhSmJgHWJALFecxxrGe0T1kLrN4TfSMUw/uELj6h5+Laph

----

bf-cfb
DtWBgA7jjoOOCHfIg+EvlWURlgrbYWM/001bn4xRbvo9r8sOoOdSAzoTsA==

----

bf-ecb
GEPm0Nw/TGb9XI00QGbMOZhSltrgjLQLcS1rjyLB+Ti8DTfIoDmkvJGqAyoJd0LY

----

bf-ofb
DtWBgA7jjoPFFmYP7IlPTkdCaP+8eY/rgB0M/12zCLTqPHerQV77Ar8L+g==

----

camellia-128-cbc
iVUMSil3yWiIY9go7atWvrd/mSOtQPKmPnoxYg+B7pwevLuC0Y5RLchGEGn0cgZb

----

camellia-128-cfb
6HYrCV2MPk3sn3oNWm0xLQarvqJ2dSgRDU/1N0tP0HnA4X+XYEvjd4d7ug==

----

camellia-128-cfb1
rsMnrvOE/y0VIFH0/SVB5FJG6X6sK6ads+TiH9UM2X42U+hRbqIRT+cdgg==

----

camellia-128-cfb8
6NRTf6JBm71uVIZzK1DLr799SKaD3UxT5cPFne3xSFuWPb9Mnn2riFz6oA==

----

camellia-128-ecb
espelBrXu4iWaxp2RZSLPyoSlck4G6ylQYHcu6zITMhmV9sMTEcUcKlZP71HYhQr

----

camellia-128-ofb
6HYrCV2MPk3sn3oNWm0xLbgO3psDlQMt7zbaA/coaJvIVJqzAaSaY6BSgA==

----

camellia-192-cbc
uz9Z+IX+P+CpQLBepmI3A9rU6Wcg1CsikKYglNU4SY3hlVOsT6PXD+hKXOobioPZ

----

camellia-192-cfb
trJ5LHzk0Y/T2TCcR6/daZ78aDxU1dJgRA6+VXU1uqFQovtUo0QRrgiCZg==

----

camellia-192-cfb1
7LLnnwpBpBkaFXrWw5qegx8KVvEgV2/VR362V5Z43qNJVPzzdvmcFjv9Vg==

----

camellia-192-cfb8
tiogUjGFA+o7MOCoACibq7PfIaV4Pgj2Js4La4SqAn6262b7b4AAfvUDbQ==

----

camellia-192-ecb
sn9QfT8PQrMrNxAR9pBT3QVNLdOyhYLKBb1joqmoOW7wzJZ7zW7P070ErkJPkMYU

----

camellia-192-ofb
trJ5LHzk0Y/T2TCcR6/dafYXU4/u9aln1U/6GzytlRC8Onnw54/t5/slvA==

----

camellia-256-cbc
Klj37OGl6nexwkw5ZgKSUgTQvAubQYKQeMjX2jMA0LDhaAxr38y91bU3dCwV6xYt

----

camellia-256-cfb
xlQLgvFHyLYmrl3plKqarQUU8dYdC0Qt0dKg6Z38KQGl0yoh5jIPtzIluA==

----

camellia-256-cfb1
gxGv92PY0eNcmtYGvdeGKveygkiBiejcckETUkVAVbYXiZO6xvFYnETR0Q==

----

camellia-256-cfb8
xjARmxeN+O730AwGfWzJaHReUxu28PAzniDHh99SFKnwAww9Iy5wtbpsCg==

----

camellia-256-ecb
M/P3GH8xSUn4bPPmD7rKupqYS6VG8nSsW65PmvuzZ7L4PJtaOGLMpqx72Wo2F2F1

----

camellia-256-ofb
xlQLgvFHyLYmrl3plKqardbHfL3lWaw0Ki9U5svO8pXQgTzUJ0jibbOI/g==

----

cast5-cbc
/XDmMTtfxYk5R+zx0Qg9B0ohoAT0kr/lRJB0OIiM7PlQqMDhM/bH2iF59qYPWn8F

----

cast5-cfb
qjxQUjVCFHtoSyLDOL6BYUGggJ95TJn0zPD/jevMKetvCjfCOOvWHvmBOw==

----

cast5-ecb
JZiSJA0Sgs6A+x5U0pffRC/cMgWmHEMptZ4JrLQ5rCvNhLj65aQryWDJDRtesuk3

----

cast5-ofb
qjxQUjVCFHs3AVHEDgPNF7R40LDHvYDeXna+4QIFWETaoBOplIIcW5BN5g==

----

des-cbc
VTSvIBHq5AqT3GZ7J3qEt1CGwYCCk7gUpyBTLhgC4kqXdzaOs2TuekAIhmRyZZ9Y

----

des-cfb
Z6znWp6g7hyOaZpvk9+24Vls+6JaUA+sgIR9h0bWAlqby7oR/fX4k2wy1A==

----

des-cfb1
fpU6lGqFl6kkQtXuv6XM112vT2CIVEV9iTnSkXd+Zrk7T065215LqO+nzA==

----

des-cfb8
Z2cEx6sPTs5lDZRq8Ejp2zhR8JbdcoqdKMTHDHA/Q5QA8/B036OKVr3QkQ==

----

des-ecb
VegFycZ1wAWwrzv0AhpJQ6mFzWr+SK6ecIyqN8iBXfFtXa3eE/4+iSKCEBXCdEfj

----

des-ede
bb85G6G8tchhxlIYF8vLpcChFtSC7Iuyywn4tssj7LP/8PHdTWZWKOJDN8NsY3Kw

----

des-ede-cbc
0nWlfDQeBtrWN2xZ1JqPl+fTeTfdrp2/bBWFTtpMcsV1Btz8UaN/YPHJ45/qJlrI

----

des-ede-cfb
sQ4TEmNrEW2T6C0wYabfGaYpwg69dOE9EZXzA7qt0JGctgiSzXwq3HT11w==

----

des-ede-ofb
sQ4TEmNrEW2mZc8ckaETVTWG+AFgiyykc68CWoiwNxuRYyVDCnrYvGS/WQ==

----

des-ede3
dzCgZyS9ovD+632p+bJy476BXmaNAKj8qA9xAClHrIgDyaQ0aOhLgFQU9dk7XItN

----

des-ede3-cbc
fAngoyT1z6mLk/y1068+0Zr2293p+4K7/JoQu5KRu3WgQJTRVim36ozjqNNIgfbX

----

des-ede3-cfb
MTLC8HyTQSkN/kYpDKSnsmFTU2IoW7rQIPMiOKIOiuZiFiYtEULxMyB6iw==

----

des-ede3-cfb1
TIfIZ6hK04UUu4IpMeKO/oLDVk3bEVCk2aKlqr7+E2f67NIHsjngE2L7vQ==

----

des-ede3-cfb8
MbhxUUq79mYdxFOVcnbM6KqxUOtaeh7tcZSlPsLOOqZrLpTnrlp7HQr92w==

----

des-ede3-ofb
MTLC8HyTQSlb6rJ3ranhIqHDnnjplmPB4Ag4asjmyCd8hmMCsWWCpBbXnQ==

----

des-ofb
Z6znWp6g7hw9YCEYjN1RHjBi6ijkmuQgrI/Q+jywb+cqqm0Zf0p4iunYcg==

----

desx-cbc
BNP57o24ysgLFrV6f1XHdEdGj3UcGKjepGDs3598A0BiJPpWKhmd4jvYEtIivZXG

----

id-aes128-CCM


----

id-aes128-GCM


----

id-aes128-wrap


----

id-aes192-CCM


----

id-aes192-GCM


----

id-aes192-wrap


----

id-aes256-CCM


----

id-aes256-GCM


----

id-aes256-wrap


----

id-smime-alg-CMS3DESwrap


----

idea-cbc
42f/2g3A7kdWcOe0+OPxcmQPw5Lmazis0nUAJeIzEVVKSkEsW7cDH5fU9z63XY3o

----

idea-cfb
ZWg7X3EGMf+FHesNqcZWANkaoW5mPIx4xvTlRqOhcLcDZ9PTF60BqpTTyQ==

----

idea-ecb
i+ncikDw1gXTz2wk7iYvlPJaTQfNshfcUcXDhHF7ud4tA3WE4VhBy43MD7u5BIbm

----

idea-ofb
ZWg7X3EGMf/fuZ41IQJ+pXIBIu1t5NK81CHarFwPNMFQRFZDAKZi6Vnqyw==

----

rc2-40-cbc
VwYhijuReEDe5vAg51O595EBrjsxWJCvP8iTqp/jqYXVwu/+CmRcNVBo4VX8KpqG

----

rc2-64-cbc
dfo5jOCLZwpSzZE8J1tDKFpwT/6hq6FFjIeeJAufBDanaAFwoDgw5lIaEfHnMbgK

----

rc2-cbc
6kBBW+RF/CbfGWb3/FBmWXz6tSyShVRI3rMoe+YrdkD/CVH/nav9Iz1z46ea/pVa

----

rc2-cfb
g6fHk/fDwnmyHgkxDhcS8uw1MeVYMoTCHc2CxvO07JIiSIa6NuMtJSSuzg==

----

rc2-ecb
RxgWGpaR8wN0KJwTsc6QfEuiqugj9Y0ijqOf2UBuIV1iItfLFqvz8vAyQFkk0gVo

----

rc2-ofb
g6fHk/fDwnnKQZxb5Kj/TvEWj1UNtZYBQGJwVgl/RsNcFR3iilMcW3GKtQ==

----

rc4
zAi3M6pkRBrBrYRy2p+bZ/xOt7dRyfZ/Bp7s0iHfIbPgS2mJij0ll/3V7g==

----

rc4-40
zAi3M6pkRBrBrYRy2p+bZ/xOt7dRyfZ/Bp7s0iHfIbPgS2mJij0ll/3V7g==

----

rc4-hmac-md5
zAi3M6pkRBrBrYRy2p+bZ/xOt7dRyfZ/Bp7s0iHfIbPgS2mJij0ll/3V7g==

----

seed-cbc
MpmWEqpktFNCFlSsRK67o/g8DmUOOCGhiDPSn/zNiRW9Og92hk2BpSpll1TthmY0

----

seed-cfb
kpvPjDQ4fDAWRde/njkfbmfCdvirZXihMyrpPmpVObIhXai8MEpB3WQdnA==

----

seed-ecb
Pq5Bdxh1ntX6tW6Vn3QmALx87r6XMGh2O0+lUfbuFYRXblENBn6JIcNp92dutdwk

----

seed-ofb
kpvPjDQ4fDAWRde/njkfbn8vdtv60gIh96cuJA0LhTuN+UXoZ/9gIw9hNA==

----

编辑-它看起来对我来说,你的C ++程序中的散列以外的东西 "The quick brown fox..." 我可以想到的对此进行调试的最佳方法(例如PHP)就是在C ++脚本中尽可能多的位置输出ciphertext变量。

当前的C实现假定密钥长度固定的密码,不适用于Blowfish 对于将密钥长度设置为某个值(例如32个字节)的密码,

EVP_EncryptInit_ex(ctx, EVP_bf_cbc(), NULL , key, iv);

必须替换为

EVP_EncryptInit_ex(ctx, EVP_bf_cbc(), NULL, NULL, NULL);
EVP_CIPHER_CTX_set_key_length(ctx, 32);
EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv);

EncryptMessage ,例如在这里 并与解密类似。 然后,C代码和PHP代码的结果相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM