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

GO与PHP的AES交互,key长度问题的更多相关文章

  1. 【飞天奔月出品】memcached四大注意事项(key长度,空格限制,最大item)

    1.   key值最大长度? memcached的key的最大长度是250个字符. 注意250是memcached服务器端内部的限制(可以修改) 如果您使用的客户端支持"key的前缀&quo ...

  2. 2020-07-29:从 innodb 的索引结构分析,为什么索引的 key 长度不能太长?

    福哥答案2020-07-29: key 太长会导致一个页当中能够存放的 key 的数目变少,间接导致索引树的页数目变多,索引层次增加,从而影响整体查询变更的效率. 索引字段大小限制关于innodb_l ...

  3. stealwatch里的安全功能——ETA结果会显示加密套件以及key长度,还有流量大小(例如41MB)

    以后可以考虑的方向,在stealwatch里包含: ad Injector click fraud cryptocurrency miner exploit kit malicious adverti ...

  4. WCF数据交互时长度超过8192

    wcf项目里面,客户端的某个函数执行时可能需要上传13000个字符到服务器. 按照常规的接口+客户端调用写好代码之后,出现了这么个错误: 网上查了很多资料,没有能够一步到位解决问题的.花了2个小时,总 ...

  5. JAVA AES CBC 加密 解密

    AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当 ...

  6. #微码分享#AES算法的C++包装类

    AES为Advanced Encryption Standard的缩写,中文名:高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准,用来替代DES.基于std:: ...

  7. go语言 实现对称加密解密算法

    package main import ( "bytes" "crypto/aes" "crypto/cipher" "crypt ...

  8. 常见加密解密 -- pycryptodomex库

    安装 windows pip install pycryptodomex ubuntu pip install pycryptodome 加密方式 单向加密:MD5 只能对数据进行加密,而不能解密 对 ...

  9. 前后端API交互数据加密——AES与RSA混合加密完整实例

    前言 前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门:https://blog.csdn.net/ityouknow/article/details/80603617),文中讲到利用R ...

随机推荐

  1. IT兄弟连 HTML5教程 HTML5文字版面和编辑标签 使用HTML表格

    表格在网站中应用得非常广泛,使用它可以方便.灵活地排版,很多动态大型网站也都是借助表格排版的,但现在都使用DIV+CSS进行页面布局.表格可以把相互关联的信息元素集中定位,使浏览页面的人一目了然.在H ...

  2. (四十六)c#Winform自定义控件-水波进度条-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  3. AI-Web1靶机渗透

    先上一张图: 靶机信息及地址:https://www.vulnhub.com/entry/ai-web-1,353/ 下载到靶机后,在VMware里打开,kali使用arp-scan -l 扫到 在浏 ...

  4. 子传父flase注意点

    1==>在子传递数据给父亲的时候, closeBottom(){ this.$emit("closeBottom",false) } false不加引号. 2==>

  5. 【1期】Java必知必会之一

    面试官:线程池那些事儿 面试官:new 一个对象有哪两个过程?

  6. Educational Codeforces Round 74 (Rated for Div. 2)

    传送门 A. Prime Subtraction 判断一下是否相差为\(1\)即可. B. Kill 'Em All 随便搞搞. C. Standard Free2play 题意: 现在有一个高度为\ ...

  7. All 432 functions were compiled because no usable IPDB/IOBJ from previous compilation was found

    解决方法: 将: 链接器——>优化——>链接时间代码生成——>使用快速链接时间代码生成(/LTCG:incremental). 改为: 链接器——>优化——>链接时间代码 ...

  8. centos7上搭建开源系统jforum

    centos7上搭建好tomcat,mysql; 将 jforum-2.6.2.war放到tomcat目录的webapps下: 启动tomcat,./startup.sh ,查看webapp下jfor ...

  9. UVA 1473 Dome of Circus

    https://cn.vjudge.net/problem/UVA-1473 题目 给出一些点,问包含这些点的最小圆锥(要求顶点在y轴,底面圆心在原点)的体积 题解 因为圆锥对称,所以可以把所有点旋转 ...

  10. poj 3253 Fence Repair 贪心 最小堆 题解《挑战程序设计竞赛》

    地址 http://poj.org/problem?id=3253 题解 本题是<挑战程序设计>一书的例题 根据树中描述 所有切割的代价 可以形成一颗二叉树 而最后的代价总和是与子节点和深 ...