今天在使用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的长度

最新文章

  1. SQL TOP 子句、SQL LIKE 操作符、SQL 通配符
  2. 小记:Bmob云端代码测试APNS推送功能 #代码片段
  3. 【转】python编码规范
  4. 创建MS Office 和 WPS 兼容插件
  5. Jquery Highcharts 选项配置 说明文档
  6. block的用法和循环引用
  7. 非服务器的定期校正时间 Anacron
  8. linux统计使用最多的10个命令
  9. jQuery 筛选器1
  10. Spring4新特性
  11. epoll的高效实现原理
  12. pycharm使用技巧 + 调试程序-12
  13. Servlet基本_Httpリクエスト、レスポンス
  14. python3 raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbid
  15. 【转】每天一个linux命令(3):pwd命令
  16. Linux网络综合命令——IP
  17. 美团的android多渠道包的3种方法
  18. win7 秘钥
  19. javascript webstorm用法
  20. 洛谷——P1754 球迷购票问题

热门文章

  1. Javascript模块化开发3——Grunt之预处理
  2. Windows下第一个驱动程序
  3. .net core使用HttpClient发送代理请求_程序内抓包_Fiddler抓包
  4. CSS学习笔记-背景属性
  5. php反序列化漏洞绕过魔术方法 __wakeup
  6. IE11,用Forms身份验证保存不了Cookie
  7. iPhone每一代的屏幕尺寸比例是多少?
  8. Android项目模块化/组件化开发(非原创)
  9. Redis专题——Redis管理工具
  10. iperf 一个测试网络吞吐的工具