2017-04-19 198 views
-1

我嘗試使用js和服務器端解密使用PHP的客戶端加密,調試了幾個小時才發現,即使他們有相同的加密方法,他們不匹配,不管大小如何等。加密客戶端/解密服務器端JS - PHP

有許多加密js庫可用,並且php中的crypt(),mcrypt,函數已被棄用。

我試圖尋找一對(前。AES.js和AES.php),但他們沒有制定出

您能否提供什麼好加密方法使用?如何實施它們。因爲我相信有一個關鍵的東西,我也聽說過IV,我甚至都不知道。

的jQuery(使用簡單SHA256)

$(document).ready(function() { 
    $("#login").on("submit", function(event) { 
     var pass = $("#pass").val(); 
     $("#pass").val(CryptoJS.SHA256(pass)); 
     var data = CryptoJS.AES.encrypt($(this).serialize(), $("#token").val()); 
     $("#login").submit(); 
    }); 
}); 

我想嘗試在PHP解密,但mcrypt_decrypt已被棄用。有這個openssl,我不知道如何使用。

+0

你應該在這裏展示一些努力。讓我們知道你是如何做的,以及你遇到什麼問題 –

+0

我一直在使用CryptoJS.AES.encrypt()函數,但我不知道如何使用它匹配它。我在php手冊中搜索過,我看到的只是一個棄用的crypt()和mcrypt_decrypt()。而openssl也沒有正確記錄。一般來說,我一直在做試驗和錯誤,因爲我在加密/解密過程中沒有任何線索。我知道如何哈希。 –

+0

有多種不同的加密算法。你也必須使用一些密鑰來加密數據。當你試圖解密你的密碼時,這是不對的。因此,在這裏分享您的加密和解密代碼 –

回答

-1

你可以試試這個代碼在PHP

$Pass = "Passwort"; 
$Clear = "Klartext";   

$crypted = fnEncrypt($Clear, $Pass); 
echo "Encrypred: ".$crypted."</br>"; 

$newClear = fnDecrypt($crypted, $Pass); 
echo "Decrypred: ".$newClear."</br>";   

function fnEncrypt($sValue, $sSecretKey) 
{ 
    return rtrim(
     base64_encode(
      mcrypt_encrypt(
       MCRYPT_RIJNDAEL_256, 
       $sSecretKey, $sValue, 
       MCRYPT_MODE_ECB, 
       mcrypt_create_iv(
        mcrypt_get_iv_size(
         MCRYPT_RIJNDAEL_256, 
         MCRYPT_MODE_ECB 
        ), 
        MCRYPT_RAND) 
       ) 
      ), "\0" 
     ); 
} 

function fnDecrypt($sValue, $sSecretKey) 
{ 
    return rtrim(
     mcrypt_decrypt(
      MCRYPT_RIJNDAEL_256, 
      $sSecretKey, 
      base64_decode($sValue), 
      MCRYPT_MODE_ECB, 
      mcrypt_create_iv(
       mcrypt_get_iv_size(
        MCRYPT_RIJNDAEL_256, 
        MCRYPT_MODE_ECB 
       ), 
       MCRYPT_RAND 
      ) 
     ), "\0" 
    ); 
} 

我沒有檢查它來解密,但是你們引用可能會嘗試。

+0

使用mcrypt還可以嗎?我真的很早就看到了這個 –

+0

,非常感謝您的耐心,儘管 –

+0

@EhmzYoshinoMamei這個PHP代碼並沒有像問題中的JavaScript代碼那樣遠程執行。你爲什麼接受它?你測試過了嗎? –

相關問題