在PHP中使用AES加密演算法加密資料及解密資料

2022-09-15 04:18:08 字數 3646 閱讀 6982

這個演算法可以將資料加密後,儲存起來,到需要用的時候,用之前加密的秘鑰將之還原。

除了這個之外,還有aes這個演算法能夠將資料很好的加密起來,在傳輸過程中不容易被破解。

在php中,我們必須先安裝好mcrypt這個模組,並且新增相應版本的擴充套件到php中。

aes加密模式和填充方式有以下之中,但不是全部

複製****如下:

演算法/模式/填充                16位元組加密後資料長度        不滿16位元組加密後長度

aes/cbc/nopadding                 16                          不支援

aes/cbc/pkcs5padding           32                          16

aes/cbc/iso10126padding       32                          16

aes/cfb/nopadding                   16                          原始資料長度

aes/cfb/pkcs5padding            32                          16

aes/cfb/iso10126padding        32                          16

aes/ecb/nopadding                   16                          不支援

aes/ecb/pkcs5padding            32                          16

aes/ecb/iso10126padding       32                          16

aes/ofb/nopadding                  16                          原始資料長度

aes/ofb/pkcs5padding           32                          16

aes/ofb/iso10126padding       32                          16

aes/pcbc/nopadding                16                          不支援

aes/pcbc/pkcs5padding          32                          16

aes/pcbc/iso10126padding      32                          16

下面就是在php中使用aes對資料加密

aes-cbc 加密方案

複製****如下:

<?php

$privatekey = "1234567812345678";

$iv  = "1234567812345678";

$data  = "test string";

//加密

複製****如下:

$encrypted = mcrypt_encrypt(mcrypt_rijndael_128, $privatekey, $data, mcrypt_mode_cbc, $iv);

$encrypted = base64_encode($encrypted);

//解密

複製****如下:

$decrypted = base64_decode($encrypted);

$decrypted = mcrypt_decrypt(mcrypt_rijndael_128, $privatekey, $decrypted, mcrypt_mode_cbc, $iv);

echo $decrypted;

?>

aes-ecb加密方案

複製****如下:

<?php

//加密  

$key = '1234567890123456';  

$content = 'hello';  

$padkey = pad2length($key,16);  

$cipher = mcrypt_module_open(mcrypt_rijndael_128, '', mcrypt_mode_ecb, '');  

$iv_size = mcrypt_enc_get_iv_size($cipher);  

$iv = mcrypt_create_iv($iv_size, mcrypt_rand); #iv自動生成?  

echo '自動生成iv的長度:'.strlen($iv).'位:'.bin2hex($iv).'

';  

if (mcrypt_generic_init($cipher, pad2length($key,16), $iv) != -1)  

//解密   

複製****如下:

$mw = bin2hex($ciphertext);  

$td = mcrypt_module_open(mcrypt_rijndael_128, '', mcrypt_mode_ecb, '');  

if (mcrypt_generic_init($td, $padkey, $iv) != -1)  

//將$text補足$padlen倍數的長度   

複製****如下:

function pad2length($text, $padlen)  

return $res;  

} //將解密後多餘的長度去掉(因為在加密的時候 補充長度滿足block_size的長度)   

複製****如下:

function trimend($text)  

}  return substr($text, 0, $len-ord($c));  

}  return $text;  

}  //16進製制的轉為2進製字串  

function hextostr($hex)   

{   

$bin="";   

for($i=0; $i

aes-ecb加密方案

複製****如下:

<?php      

$key = '1234567890123456';  

$key = pad2length($key,16);  

$iv = 'asdff';  

$content = 'hello';  

$content = pad2length($content,16);  

$aesed =  bin2hex( mcrypt_encrypt(mcrypt_rijndael_128,$key,$content,mcrypt_mode_ecb,$iv) ); #加密  

echo "128-bit encrypted result:".$aesed.'

';  

$jiemi = mcrypt_decrypt(mcrypt_rijndael_128,$key,hextostr($aesed),mcrypt_mode_ecb,$iv); #解密  

echo '解密:';  

echo trimend($jiemi);    

?>

以上只是我列出的簡單的3種加密方法,事實上還有很多中方法,需要我們不斷的學習。密碼學的道路還任重而道遠。

在PHP中使用AES加密演算法加密資料

在研究discuz 的時候,發現discuz有一套相當完美的加密演算法 相對而言 這個演算法可以將資料加密後,儲存起來,到需要用的時候,用之前加密的秘鑰將之還原。除了這個之外,還有aes這個演算法能夠將資料很好的加密起來,在傳輸過程中不容易被破解。在php中,我們必須先安裝好mcrypt這個模組,並...

在PHP中使用AES加密演算法加密資料

在研究discuz 的時候,發現discuz有一套相當完美的加密演算法 相對而言 這個演算法可以將資料加密後,儲存起來,到需要用的時候,用之前加密的秘鑰將之還原。除了這個之外,還有aes這個演算法能夠將資料很好的加密起來,在傳輸過程中不容易被破解。在php中,我們必須先安裝好mcrypt這個模組,並...

在PHP中使用AES加密演算法加密資料

在php中,我們必須先安裝好mcrypt這個模組,並且新增相應版本的擴充套件到php中,詳情可以看 不重新編譯php安裝mcrypt擴充套件 aes加密模式和填充方式有以下之中,但不是全部 演算法 模式 填充 16位元組加密後資料長度 不滿16位元組加密後長度 aes cbc nopadding 1...