PHP實現的AES 128位加密演算法示例

2022-09-26 04:51:09 字數 2199 閱讀 7327

/*

加密演算法一般分為兩種:對稱加密演算法和非對稱加密演算法。

對稱加密

對稱加密演算法是訊息傳送者和接收者使用同乙個密匙,傳送者使用密匙加密了檔案,

接收者使用同樣的密匙解密,獲取資訊。常見的對稱加密演算法有:des/aes/3des.

對稱加密演算法的特點有:速度快,加密前後檔案大小變化不大,但是密匙的保管是個大問題

,因為訊息傳送方和接收方任意一方的密匙丟失,都會導致資訊傳輸變得不安全。

非對稱加密

與對稱加密相對的是非對稱加密,非對稱加密的核心思想是使用一對相對的密匙

分為公匙和私匙,私匙自己安全儲存,而將公匙公開。公鑰與私鑰是一對,如果用公鑰對資料進行加密,

只有用對應的私鑰才能解密;如果用私鑰對資料進行加密,那麼只有用對應的公鑰才能解密傳送資料前只需要使用接收方的公匙加密就行了。

常見的非對稱加密演算法有rsa/dsa:非對稱加密雖然沒有密匙儲存問題,但其計算量大,加密速度很慢,有時候我們還需要對大塊資料進行分塊加密。

數字簽名

為了保證資料的完整性,還需要通過雜湊函式計算得到乙個雜湊值,這個雜湊值被稱為數字簽名。其特點有:

無論原始資料是多大,結果的長度相同的;

輸入一樣,輸出也相同;

對輸入的微小改變,會使結果產生很大的變化;

加密過程不可逆,無法通過雜湊值得到原來的資料;

常見的數字簽名演算法有mwww.cppcns.comd5,hash1等演算法。

php的openssl擴充套件

openssl擴充套件使用openssl加密擴充套件包,封裝了多個用於加密解密相關的php函式,極大地方便了對資料的加密解密。 常用的函式有:

對稱加密相關:

string openssl_encrypt ( string $data , string $method , string $password)

其中$data為其要加密的資料,$method是加密要使用的方法,$password是要使用的密匙,函式返回加密後的資料;

其中$method列表可以使用openssl_get_cipher_methods()來獲取

其解密函式為 string openssl_encrypt ( string $data , string $method , string $password)

非對稱加密相關:

它們都只需要傳入證書檔案(一般是.pem檔案);

使用公匙加密資料,其中$data是要加密的資料;$crypted是乙個引用變數,加密後的資料會被放入這個變數中;$key是要傳入的公匙資料;

由於被加密資料分組時,有可能不會正好為加密位數bit的整數倍,所以需要$padding(填充補齊),

$padding的可選項有 openssl_pkcs1_padding, openssl_no_padding,分別為pkcs1填充,或不使用填充;

簽名函式:$data為要簽名的資料;$signature為簽名結果的引用變數;$priv_key_id為簽名所使用的私匙;$signature_alg為簽名要使用的演算法

,其演算法列表可以使用openssl_get_md_methods()得到

驗籤函式:與簽名函式相對,只不過它要傳入與私匙對應的公匙;其結果為簽名驗證結果,1為成功,0為失敗,-1則表示錯誤;

* */

/* * 基於百度雲api的例子

* 密碼一律採用aes 128位加密演算法進行加密,用sk的前16位作為金鑰,

* 加密後生成的二進位制位元組流需要轉成十六進製制,並以字串的形式傳到服務端

* */

function aes128withfirst16char($adminpass, $secretaccesskey)

//把密碼填充成16位

function pkcs5pad($adminpass)

echo aes128withfirst16char('加密的密碼','key值');

ps:關於加密解密感興趣的朋友還可以參考本站**工具:

文字**加密解密工具(包含aes、des、rc4等):

md5**加密工具:

**雜湊/雜湊演算法加密工具:

**md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:

程式設計客棧.net/password/hash_md5_sha

**sha1/sha224/sha256/sha384/sha512加密工具:

.net/password/sha_encode

aes 128位加密 解密

coding utf 8 import sys from crypto.cipher import aes from crypto import random from binascii import b2a hex,a2b hex class prpcrypt def init self,key ...

AES 128 加密補充

for i 0 imemcpy newstr 16 i,out,16 strcat newstr,out return newstr base64 int base64encode char orgstring,char base64string,int orgstringlen else orgs...

AES的C 實現 128位金鑰

寫了乙個aes的c 實現,僅支援128位金鑰,寫得匆忙,不夠規範,僅供參考。aes.h ifndef aes h define aes h include include using namespace std class aes void aes encryptionprocess finalro...