【问题标题】:Issue encrypting string in C++ and decrypting in PHP在 C++ 中加密字符串并在 PHP 中解密
【发布时间】:2016-12-25 11:15:06
【问题描述】:

我在用 C++ 加密我的字符串然后用 PHP 解密时遇到问题。在 C++ 方面,我认为一切都很好。下面是我的 C++ 端代码。

unsigned char inbuffer[1024];

unsigned char outbuffer[1024];

unsigned char oneKey[] = "abc";
AES_KEY key;

AES_set_encrypt_key(oneKey, 128, &key);

string straa("hello world\n");
memcpy((char*)inbuffer, straa.c_str(), 13);

AES_encrypt(inbuffer, encryptedbuffer, &key);

LPCSTR pszSource = (LPCSTR)encryptedbuffer;
DWORD nDestinationSize;
if (CryptBinaryToString(reinterpret_cast<const BYTE*> (pszSource), strlen(pszSource), CRYPT_STRING_BASE64, nullptr, &nDestinationSize))
{
    LPTSTR pszDestination = static_cast<LPTSTR> (HeapAlloc(GetProcessHeap(), HEAP_NO_SERIALIZE, nDestinationSize * sizeof(TCHAR)));
    if (pszDestination)
    {
        if (CryptBinaryToString(reinterpret_cast<const BYTE*> (pszSource), strlen(pszSource), CRYPT_STRING_BASE64, pszDestination, &nDestinationSize))
        {

            printf("OUT: %s", pszDestination); // Base64 encoded output of encrypted string


        }

    }
}

这是我的 PHP 代码:

$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('AES-256-CBC'));
$out = openssl_decrypt(base64_decode("G6g0f/K7EzAw8fxn9BTFzw=="), 'AES-256-CBC', "abc", OPENSSL_RAW_DATA, $iv);

echo $out;

PHP 代码没有输出。

C++ 代码将输出以下内容:

OUT: G6g0f/K7EzAw8fxn9BTFzw==

【问题讨论】:

  • 我在这里帮不上忙,因为我没有 C++ 经验,但我很感兴趣(如果您有时间解释)您使用 C++ 和 PHP 的组合是为了什么?
  • 我当然有时间。我正在创建一个登录客户端,它将客户端传输到 AES 中的服务器数据,以防止人们查看网络流量。
  • 使用 HTTPS 保护客户端到服务器的通信。
  • 1.如果客户端正在运行我的登录客户端,他/她可以解密 HTTPS 通信。 2. 我在第一行 PHP 代码中提供了 IV。
  • 如果您固定证书:否。连采石串都加密了,只有服务器地址没有加密。如果您不固定证书,老练的用户可以使用诸如 Charles Proxy 之类的代理。

标签: php c++ mcrypt


【解决方案1】:

CBC模式,PHP代码中使用的模式,确实需要一个iv,它必须与用于加密的模式相同,并且加密和解密模式必须相同。对于 CBC 模式,您需要提供一个块大小的 iv(AES 为 16 字节)。加密密钥也应该是正确的大小。

iv 没有在 C++ 代码中显式设置,模式和填充使用默认值,最好是驱逐;明确指定所有参数。 iv 对于每个加密应该是随机的。

你可以考虑RNCryptor,它是多语言和多平台的,可以处理所有细节。

【讨论】:

    猜你喜欢
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多