2

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;
    }

この問題を解決するのを手伝ってください

4

2 に答える 2

1

最も可能性の高い問題は、暗号化されたデータを復号化するために正しいキーを使用していないことです。あなたのコードは、実際に調べている多くの問題を示しています。

  • キーは、理想的にはバイナリ文字列である必要があります。の正確な内容は$customer_id何ですか? それが文字列であっても、正確に 128、192、または 256 ビットの長さでなければなりません。そうではないようです。
  • キーが技術的に許容できるものであったとしても、顧客 ID をキーとして使用しても、実際にはセキュリティはまったく提供されません。
  • 256 inMCRYPT_RIJNDAEL_256は、暗号化の強度を指定するのではなく、ブロック サイズを指定します。ほとんどの場合、MCRYPT_RIJNDAEL_128代わりに使用する必要があります。実際、これを行うことは AES と同じです。MCRYPT_RIJNDAEL_256は AES ではありません。
于 2012-09-06T10:45:33.837 に答える
0

これらの関数は任意の PHP オブジェクトを受け取り、それらを暗号化/復号化します。

JSON オブジェクトを暗号化する Rijndael ECB base 64 エンコード

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 デコード

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;
}
于 2012-09-06T10:40:52.980 に答える