一、实现使用异或进行数据加密解密
原理:相同为否(0),不同为真(1)
在代码中xor代表异或,首先获取明文与密钥的长度,并用列表保存密文,进行循环即对明文的每一位和密钥的每一位进行异或操作。密钥长度<明文长度时要循环,将字符变成数字,和密钥相应位异或,之后又将其转换成字符即可。解密为逆过程。
注意:更改密钥之后运行结果不同
二、用cryptography库验证AES加密
首先设置密钥长度(128,192,256位)调用库, 构造密钥,创建随机数os,建立加密对象进行初始化,构造好加密对象cipher。输入加密内容,将字符串所对应数字操作,调用update ,利用base64将二进制加密内容转为文本从而显示出来。解密时创建decryptor后调用update,再用decode解码。
【实现使得在调用AES时可以输入任意长度的字符串】
方法:AES输入长度必须是密钥长度整数倍,需计算输入内容的长度,
即在输入内容后面添加计算长度的代码(print(len(txt.encode()))),若非整数倍则用空格补齐即可。首先输入内容计算长度以及需要补的空格数,补齐空格后完成AES加解密过程。
三、验证RSA加密的过程
1.利用GenRasKey代码生成RSA的密钥对:调用cryptography库,调用generate_private_key创建RSA私钥,然后从私钥导出公钥并且将二者保存,之后得到私钥与公钥二进制对象后写入文件,从而生成RSA的密钥对。
2.利用EnRsa代码加密:打开保存的公钥并读取,将内容进行加密并用padding填充,再用base64转换成字符串。
3.利用DeRsa代码解密:复制所得字符串,粘贴到encrypted,调用私钥进行解密。
【若要在上述过程中加入MD5算法,实现消息的认证:
首先计算消息的md5值,对消息用rsa加密得到密文,把md5,密文一块发送,对方收到消息后对消息再进行一次加密,然后得到消息摘要,比较两个md5值是否相同来确定消息有没有被篡改。】
四、使用RSA和AES混合加密:
用AES对数据进行加密,用RSA对AES的密钥进行加密,传输加密后的数据以及秘钥,对于秘钥进行解密,然后用解密后的秘钥对于数据进行解密即可得到结果。