上次讲了下AES的ECB模式,这次讲一下CBC模式
两个模式的区别在于,ECB不需要iv偏移值,直接加解密就可以了
CBC是需要iv偏移量值进行加解密的。
这里讲说的对于公私钥本身的加解密是指,公私钥从接口获取到,数据为str类型的字符串,如何进行AES加解密
上菜咯!
BS = AES.block_size pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) unpad = lambda s: s[0:-ord(s[-1])] iv = bytearray([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
AES的算法是一样的,可以直接套用;
iv偏移值是bytes型的数据,这个具体看自己怎么定义吧。如果对公私钥进行加密的是如图所示的iv格式,那么解密的时候也是一定要用这种格式的,否则会出错。
iv也可以用b'0000000000000000',但是用了这种格式的就不可以用上图的iv进行解码,会报错,反之也是一样的。(iv也是需要16位的哦!)
----------------------------------------------------我是分割线---------------------------------------------------
# 对公私钥加密 def AES_encrypt_code(text, key): cipher = AES.new(AES_encrypt.add_to_16(key), AES.MODE_CBC, iv) AES_code = AES_encrypt.add_to_16(pad(text)) code = cipher.encrypt(AES_code) base64_text = str((base64.encodebytes(code)).decode()).replace('\n', '') return base64_text
对于公私钥的加密,key是跟ECB模式中一样,需要16位的,这个可以自行定义,然后是需要加密的信息,这里的格式是str型的,前面有说过公私钥是从接口中拿到的,所以公私钥信息拿出来的时候是str类型的;
如果那key类型的参数用我讲的AES/CBC方式进行加解密,就会报错,这一点一定要注意,如果需要用的话,就请自行转换格式
其实加密的方法基本相同,只是其他的模式比ECB模式多了个iv值,其他的基本一致,不过填充的信息不一致的时候也是要修改代码的
cipher = AES.new(AES_encrypt.add_to_16(key), AES.MODE_CBC, iv)
括号中的信息是加解密中需要的16位key值,然后是加密模式、iv偏移值
然后初始化加密器,为后面做准备
接下来就是加密,然后转码,最后再格式化一下就OK了!
----------------------------------------------------我又来切割了---------------------------------------------------
# 对公私钥解密 def AES_decrypt_code(text, key): cipher = AES.new(AES_encrypt.add_to_16(key), AES.MODE_CBC, iv) base64_decrypted = base64.decodebytes(text.encode('utf-8')) decrypted_text = unpad(cipher.decrypt(base64_decrypted).decode('utf-8')) decrypted_code = decrypted_text.rstrip('\0') return decrypted_code
解密的方式也是跟ECB模式差不多,思路是完全一样的,就是优先逆向解密
(就跟逛大街一样,那头过来的,就这头回去,当此路不通时,就换个路口)
要记得我上一篇所讲到到的解决方案哦!
(当编码出现问题时 ,考虑下我所说的解决方案:解密过程中的转码需要用encoding='utf-8',解密后的格式化需要用decode(‘utf-8’))
相关推荐
AES/CBC/PKCS5Padding,加密解决 支持javascript、java、iOS
C#加密 解密对接java 的加密AES/CBC/PKCS7Padding 转16进制 C#加密解密中的详细整理
本文使用开运库cryptopp,实现AES/CBC/PKCS5Padding/ 的加解密,希望能帮助到有需要的人
轻松实现 Python AES和Java AES/ECB/PKCS5Padding互转
这是一个Android开发中的文本加密解密工具类,使用AES128对称加密算法,该资源是一个AndroidStudio3.1版本写的工程,其中包含一个工具类和一个调试活动界面,可解压后直接运行。这个是我为公司项目写的与服务器端...
实现了AES/ECB/PKCS5Padding、AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充。是标准的AES算法,支持在线AES加解密网站互解。 本源码从CSDN一位前辈的源码基础上做了更改,增加支持加密返回BASE64,更加...
AES/ECB/PKCS5Padding 算法,用于数据加密,实现方式为Java。AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准
在对接java开发的加密方法,整理的PHP 对接java AES/ECB/PKCS7Padding加密转16进制字符串,加解密方法
JAVA解决AES ECB 模式下加密解密;附加国内三方AES加密网站---http://tool.chacuo.net/cryptaes;如有用解决您工作问题,烦请点个赞
关于C++和JAVA,AES/ECB/PKCS5Padding 互相通信的问题一点小见解和代码。 有需要的可以下载一下。
公司有用C#写的AES代码 又有用JAVA AES CBC PKCS5Padding 加密的 但对于由JAVA AES CBC PKCS5Padding 加密的数据C++解密的资料极为稀缺 故本人找到了一些资源 同时改写了一些填充方式 使得与JAVA C#兼容 VS2010 测试...
AES/ECB/PKCS5Padding C++实现
主要介绍了Java实现AES/CBC/PKCS7Padding加解密的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...
由于业务需求需要对接java接口,对方接口采用AES/ECB/PKCS5Padding加密技术,还经过,16进制转换,当时花了不少时间,所以记录一下,你们可以根据你们的需求调整。
由于业务需求需要对接java接口,对方接口采用AES/ECB/PKCS5Padding加密技术,还经过,16进制转换,php端采用openssl加解密方式。调试可以访问http://tool.chacuo.net/cryptaes
c++ AES 加密
Java端AES/CBC/PKCS5Padding加解密代码,与Python端from cryptography.fernet import Fernet模块的加解密保持一致,两端加密后的数据互通,本代码仿照Fernet的加解密流程进行移植。
最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...
引入依赖 <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId> <version>1.46</version> </dependency>