`
xiaoqingcai92
  • 浏览: 9828 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类

python3.6 AES/CBC/pkcs1padding 对于公私钥的

 
阅读更多

微笑上次讲了下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’)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics