GO与PHP的AES交互,key长度问题
今天在使用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长度问题的更多相关文章
- 【飞天奔月出品】memcached四大注意事项(key长度,空格限制,最大item)
1. key值最大长度? memcached的key的最大长度是250个字符. 注意250是memcached服务器端内部的限制(可以修改) 如果您使用的客户端支持"key的前缀&quo ...
- 2020-07-29:从 innodb 的索引结构分析,为什么索引的 key 长度不能太长?
福哥答案2020-07-29: key 太长会导致一个页当中能够存放的 key 的数目变少,间接导致索引树的页数目变多,索引层次增加,从而影响整体查询变更的效率. 索引字段大小限制关于innodb_l ...
- stealwatch里的安全功能——ETA结果会显示加密套件以及key长度,还有流量大小(例如41MB)
以后可以考虑的方向,在stealwatch里包含: ad Injector click fraud cryptocurrency miner exploit kit malicious adverti ...
- WCF数据交互时长度超过8192
wcf项目里面,客户端的某个函数执行时可能需要上传13000个字符到服务器. 按照常规的接口+客户端调用写好代码之后,出现了这么个错误: 网上查了很多资料,没有能够一步到位解决问题的.花了2个小时,总 ...
- JAVA AES CBC 加密 解密
AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当 ...
- #微码分享#AES算法的C++包装类
AES为Advanced Encryption Standard的缩写,中文名:高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准,用来替代DES.基于std:: ...
- go语言 实现对称加密解密算法
package main import ( "bytes" "crypto/aes" "crypto/cipher" "crypt ...
- 常见加密解密 -- pycryptodomex库
安装 windows pip install pycryptodomex ubuntu pip install pycryptodome 加密方式 单向加密:MD5 只能对数据进行加密,而不能解密 对 ...
- 前后端API交互数据加密——AES与RSA混合加密完整实例
前言 前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门:https://blog.csdn.net/ityouknow/article/details/80603617),文中讲到利用R ...
随机推荐
- LinAlgError: Last 2 dimensions of the array must be square
python 矩阵计算时出现错误 此时如果矩阵不是方阵,就会出现如下错误: 这里值得注意的是:当我们这样使用的时候,程序运行又会很正常: 貌似我们求得了非方阵的逆. 下面我们来验证一下: 仔细一看,这 ...
- jQuery 源码解析(二十二) DOM操作模块 复制元素 详解
本节说一下DOM操作模块里的复制元素子模块,该模块可以复制一个DOM节点,并且可选择的设置是否复制其数据缓存对象(包含事件信息)和是否深度复制(子孙节点等),API如下: $.clone(elem, ...
- Python 从入门到进阶之路(六)
之前的文章我们简单介绍了一下 Python 的面向对象,本篇文章我们来看一下 Python 中异常处理. 我们在写程序时,有可能会出现程序报错,但是我们想绕过这个错误执行操作.即使我们的程序写的没问题 ...
- 一分钟了解Docker
一.Docker概述 Docker和虚拟机一样,都拥有环境隔离的能力,但它比虚拟机更加轻量级,可以使资源更大化地得到应用. Docker用途:简单配置.代码流水线管理.开发效率.应用隔离.服务器整合. ...
- Netty服务端Channel注册Selector及绑定服务器端口
当服务端Channel 创建并且初始化完成之后,会将其注册到 selector,通过语句config().group().register(channel)进行注册工作,该方法最终调用 Abstrac ...
- Java生鲜电商平台-商城优惠券设计要点复盘与总结
Java生鲜电商平台-商城优惠券设计要点复盘与总结 Java生鲜电商平台本文将从优惠券设计用户端,需求端,业务流程全方案解析优惠券设计方案 为什么要设计优惠券 设计优惠券的核心:拉新和促活 新产品上线 ...
- Servlet、Jsp
一.Servlet 1.什么是Servlet? (1)由sun公司(被oracle公司收购)制定的一种用来扩展web服务器功能的组件规范.简单的讲就是一种用来开发动态Web的技术. 扩展web服务器功 ...
- CSS学习笔记-边框图片等属性
1.边框图片: 1.1含义: 告诉浏览器指定一张图片作为边框 1.2格式: border-image-source:url ...
- NumPy实现数据的聚合,计算最大值,最小值
1.数组值的求和 首先构造一个具有100个值的数组,然后我们利用两个不同的方法进行求和: >>> l=np.random.random() l的数据如下: >>> ...
- 【Gradle】Android Gradle 插件
Android Gradle 插件 Android Gradle 插件简介 从Gradle角度来看,Android其实是Gradle的一个第三方插件,它是由Google的Android团队开发的.但从 ...