PHP数据加密和解密

时间:2012-09-06 10:35:47

标签: php

我正在尝试使用php加密数据并插入到mysql中。加密和插入操作正常工作但解密不返回实际字符​​串。请参阅下面的代码以了解加密

public function encryptText($text,$customer_id)
    {
        $key = $customer_id;
        $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB);
        return $crypttext;
    }

用于解密

public function decryptText($ctext,$customer_id)
    {
            $key = $customer_id;
            $text = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$key,$ctext,MCRYPT_MODE_ECB);
            return $text;
    }

请帮我解决这个问题

2 个答案:

答案 0 :(得分:1)

最可能的问题是您没有使用正确的密钥来解密加密数据。您的代码显示了真正查看的一些问题:

  • 理想情况下,密钥应该是二进制字符串。 $customer_id的确切内容是什么?即使它是一个字符串,它应该是128,192或256位长。它看起来不像。
  • 即使密钥在技术上是可以接受的,使用客户ID作为密钥也根本不提供任何安全性。
  • MCRYPT_RIJNDAEL_256中的256不指定加密强度,而是指定块大小。在几乎所有情况下,您都应该使用MCRYPT_RIJNDAEL_128 - 事实上这样做与AES相同。 MCRYPT_RIJNDAEL_256不是AES。

答案 1 :(得分:0)

这些函数将接受任何PHP对象并加密/解密它们:

加密JSON对象Rijndael ECB base 64 encode

function ejor2eb($object, $key) {
    // Encode the object
    $object = json_encode($object, JSON_FORCE_OBJECT);

    // Add length onto the encoded object so we can remove the excess padding added by AES
    $object = strlen($object) . ':' . $object;

    // Encrypt the string
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
    $result = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $object, MCRYPT_MODE_ECB, $iv);

    // Return the URL encoded string, with the encryption type attached
    return 'jor2eu:' . base64_encode($result);
}

解密JSON对象Rijndael ECB base 64 decode

function djor2eb($string, $key, $default = false) {
    // Remove the encryption type, and decode the string
    $binary = base64_decode(substr($string, 7));
    if (!$binary) {
        return $default;
    }

    // Decrypt the string
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
    $result = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $binary, MCRYPT_MODE_ECB, $iv);

    // Remove encrption padding
    $tokens = null;
    preg_match('/^([0-9]+):/i', $result, $tokens);
    if (sizeof($tokens) !== 2) {
        return $default;
    }
    $result = substr($result, strlen($tokens[1]) + 1, $tokens[1]);

    // Decode the ecoded object
    $object = json_decode($result);

    return $object;
}