今天在使用go與php的AES加解密互動中,一直有個問題那就是在go中加密后,在php端始終都是無法解密,經過排查最后發現是加密key長度引起的問題, 這里簡單記錄下,
go的AES使用的是第三方的庫,openssl,因為用的匆忙,沒注意看檔案,所以就直接弄了示例代碼,才發現和php端無法解密,其實在檔案中它其實講的很清楚了, “The length of the key can be 16/24/32 characters (128/192/256 bits)”,這個key的長度只能是16,24和32個字符,分別對應AES-128, AES-192, or AES-256等模式,
我在php中因為沒有太在意這個長度,所以搞的32位,但由于我用的是ECB模式,所以其實32位的字符長度實際是截成16個字符了,那么我在go中還配置成32個字符就不對了,直接在go中把key的長度改成php中配置的key的一半就行了,哎,你說這坑貨php,如果key配置不對提示下多好,
go代碼
func Encrypt(data map[string]interface{}) (s string) {
src,_ :=json.Marshal(data)
key := []byte("YzfNCQoF9P7tjwyZ")
dst , err := openssl.AesECBEncrypt(src, key, openssl.PKCS7_PADDING)
if err !=nil {
fmt.Printf("encrypt error:%s" ,err)
}
fmt.Printf(SafeBase64Encode(base64.StdEncoding.EncodeToString(dst)) )
return SafeBase64Encode(base64.StdEncoding.EncodeToString(dst))
}
php代碼
public static function encrypt($str, $key){
$encryptStr = openssl_encrypt($str, 'AES-128-ECB',$key,OPENSSL_RAW_DATA);
return static::urlsafe_b64encode($encryptStr);
}
總結:php與golang的AES, 要多注意下key的長度
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/56911.html
標籤:Go
上一篇:Golang設定https訪問,以及http如何重定向到https
下一篇:centos安裝go環境
