数据加解密时通常是以bytes形式存储,加解密算法运行前需要先对数据进行处理。
以SM4算法示例数据为例,待加密数据为:0123456789abcdeffedcba9876543210,bytes类型则有两种表示方式
message1 = b'0123456789abcdeffedcba9876543210'
message2 = b'\x01\x23\x45\x67\x89\xab\xcd\xef\xfe\xdc\xba\x98\x76\x54\x32\x10'
虽然都是bytes类型,但它们的长度并不相同。运行如下代码:
print('message1:',message1)
print('message2:',message2)
print('message1_type:',type(message1))
print('message2_type:',type(message2))
print('message1_length:',len(message1))
print('message2_length:',len(message2))
得到结果为:
无论哪种类型,SM4计算时要将其分为4个32位数据处理。我的想法是先转为字符串,然后截取。两种转换方式分别为:
msg1_str = message1.decode()
msg2_str = message2.hex()
print('msg1_str:',msg1_str)
print('msg2_str:',msg2_str)
print('msg1_type:',type(msg1_str))
print('msg2_type:',type(msg2_str))
得到:
若初始明文消息为message2的形式,加密后我无法将密文转换为这种形式,导致无法解密。因此将明文转为message1的形式,便于后续处理。