簡體   English   中英

mcrypt似乎不是100%可逆的

[英]mcrypt seem to be not 100% reversible

我的數據庫中有336個“客戶”

我嘗試使用此代碼encrypt然后decrypt一些數據

本質是:正確:323-錯誤:13

是什么原因導致mcrypt不完全可逆?

編輯:請不要嘗試更改問題的性質,詢問我的問題,否則我將投票否決您的答案。 這個算法的問題似乎不是100%可逆的,這就是問題,不是我要使用它的問題

        $wrong = $right = 0;

        foreach ($clients as $c) {
            $string_to_encode = trim($c->first_field . ":::" . $c->last_field);

            $mc_key = Yii::app()->params["rijndael_key"];
            $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
            $iv_1 = mcrypt_create_iv($iv_size, MCRYPT_RAND);
            $crypt = trim(mcrypt_encrypt(
                MCRYPT_RIJNDAEL_256,
                $mc_key,
                $string_to_encode,
                MCRYPT_MODE_ECB,
                $iv_1));
            $token = urlencode(base64_encode($crypt));

            $string_to_decode = base64_decode(urldecode($token));
            $string_decoded = trim(mcrypt_decrypt(
                MCRYPT_RIJNDAEL_256,
                $mc_key,
                $string_to_decode,
                MCRYPT_MODE_ECB,
                $iv_1));


            if ($string_to_encode != $string_decoded) {
                echo $string_to_encode . PHP_EOL;
                echo "***** ERROR ! ***** " . PHP_EOL;
                echo $string_to_encode . PHP_EOL;
                echo $string_decoded . PHP_EOL;
                $wrong ++;
            } else {
                $right ++;
            }

        }

        echo "Right $right - Wrong $wrong" . PHP_EOL;

與純字符串和解碼后的字符串有一些差異[請注意,我更改了登錄名....]

customer.email@alice.it:::11734
customer.email@alice.it:::11z͉\wo����y�+�   �>�d��x�

該算法不是100%可逆的。 這是問題,這是問題...很明顯,我不會在生產中使用它...這只是向您演示該算法有問題的一種情況

其他人提到了它,但是您正在修剪加密結果。 密文將隨機出現,並且您正在加密的某些項目將在末尾產生空格。

如果修剪密文,則會丟失信息,並且字符串將無法正確解碼。

不用加密密碼,而是對它們進行哈希處理

好處:

  • PHP(5.5+)具有用於密碼哈希和驗證的本機API。
  • 散列總是不可逆的。 如果您的數據庫被盜,攻擊者將永遠無法直接獲得純文本密碼。
  • 正確的哈希+鹽漬解決了99%的密碼攻擊向量。

已經解決了,您不應使用雙向加密算法來保存密碼,而應使用單向哈希算法。

您正在修整數據密文。 刪除mcrypt_encrypt() trim()周圍的mcrypt_encrypt()即可。

也就是說,您還有另一個問題。 您生成了IV,但是ECB模式不使用IV,因此它們是無用的。 保持密文更加不可預測的更安全方法是切換到CBC模式。 執行此操作時,請記住,加密和解密時IV應當相同(即$iv_1$iv_2應該相同)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM