PHP使用OpenSSL實現AES加密的筆記

2022-05-19 13:36:02 字數 1481 閱讀 4737

記錄這兩天遇到的一些問題,一開始主要是對一些概念理解的不清楚

比如aes是一種演算法,而openssl是乙個擴充套件庫,其中包含對aes演算法的實現

當然在完全理解演算法後可以自己實現,但可能會遇到很多問題,我會在以後進行嘗試

目前在專案的使用中,還是使用擴充套件庫的方法最快最簡單

1,加密方法:

通用的單鑰加密演算法為des(data encryption standard),通用的雙鑰加密演算法為rsa( rivest-shamir-adleman),都產生於上個世紀70年代。

目前用aes來代替des(都是單鑰)。

我選擇使用aes演算法來進行加密。

2,簡單了解aes:

aes 有三種演算法,主要是對資料塊的大小存在區別:

aes-128:需要提供 16 位的金鑰

aes-192:需要提供 24 位的金鑰

aes-256:需要提供 32 位的金鑰

aes 是按資料塊大小(128/192/256)對待加密內容進行分塊處理的,會經常出現最後一段資料長度不足的場景,這時就需要填充資料長度到加密演算法對應的資料塊大小。

3,實現方式:

aes本質是演算法,下面需要想辦法實現。

在php中,如果不自己實現演算法的話,有兩種方式可以呼叫aes演算法進行加密

乙個是mcrypt,乙個是openssl

(php在7.2版本已經完全移除了mcrypt加密;php的openssl擴充套件已經實現了aes加密演算法,我們可以通過openssl擴充套件提供的方法實現對資料的加密和解密)

我們選擇openssl

4,在php中加入openssl擴充套件

因為還沒有嘗試linux的openssl安裝,故這裡只記錄window的成功安裝方式。

步驟:1: 首先檢查php.ini中;extension=php_openssl.dll是否存在, 如果存在的話去掉前面的注釋符『;', 如果不存在這行,那麼新增extension=php_openssl.dll。

2: 講php資料夾下的: php_openssl.dll, ssleay32.dll, libeay32.dll 3個檔案拷貝到 windows\system32\  資料夾下。(注:所在子目錄可能有所不同)

3: 重啟apache或者iis(iisreset /restart)

至此,openssl功能就開啟了。

5,新增範例**:

如下:(作者來自思否captainblue)

1

class

aes_128_cw 910

public

function decode($secretdata)13

14public

function encode($data

)17 }

6,進行測試

本地環境php版本是5.6.9,phpstudy 8.1

就是這樣

修改後可以將該類放入專案的擴充套件類庫,進行公共使用,或是以中介軟體的方式進行通訊加密,以後更新這部分。

php使用openssl來實現非對稱加密

使用非對稱加密主要是借助openssl的公鑰和私鑰,用公鑰加密私鑰解密,或者私鑰加密公鑰解密。1.安裝openssl和php的openssl擴充套件 2.生成私鑰 openssl genrsa 用於生成rsa私鑰檔案,生成是可以指定私鑰長度和密碼保護 plain view plain copy op...

php使用openssl來實現非對稱加密

使用非對稱加密主要是借助openssl的公鑰和私鑰,用公鑰加密私鑰解密,或者私鑰加密公鑰解密。1.安裝openssl和php的openssl擴充套件 2.生成私鑰 openssl genrsa 用於生成rsa私鑰檔案,生成是可以指定私鑰長度和密碼保護 openssl genrsa out rsa p...

php使用openssl來實現非對稱加密

使用非對稱加密主要是借助openssl的公鑰和私鑰,用公鑰加密私鑰解密,或者私鑰加密公鑰解密。1.安裝openssl和php的openssl擴充套件 2.生成私鑰 openssl genrsa 用於生成rsa私鑰檔案,生成是可以指定私鑰長度和密碼保護 openssl genrsa out rsa p...