python知识点一次性密码加密文件

技能实验室 发表于 2022/11/18 09:41:40 2022/11/18
【摘要】 加密原理一次性密码(One-time password)。原理非常简单,加密的过程就是明文和密钥(key)进行异或,得到密文,而解密的过程就是密文和密钥(key)异或,得到明文。这里面最重要的概念是异或操作;什么是异或:异或,是一个数学运算符,英文为exclusive OR,缩写为xor,应用于逻辑运算。异或也叫半加运算,其运算法则相当于不带进位的二进制加法。异或的运算法则如下:1、真异或假...

加密原理

一次性密码(One-time password)。原理非常简单,加密的过程就是明文和密钥(key)进行异或,得到密文,而解密的过程就是密文和密钥(key)异或,得到明文。

这里面最重要的概念是异或操作;

什么是异或:

异或,是一个数学运算符,英文为exclusive OR,缩写为xor,应用于逻辑运算。异或也叫半加运算,其运算法则相当于不带进位的二进制加法。

异或的运算法则如下:

  • 1、真异或假其结果为真;
  • 2、假异或真其结果为真;
  • 3、假异或假其结果为假;
  • 4、真异或真其结果为假。

总结就是:

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

加密实现

  • 读取文件信息,获取文件长度
toBeEncryptedFile = open(file, 'rb').read()
size = len(toBeEncryptedFile)
  • 生成与文件等长的随机密钥
 p_key = os.urandom(size)
 with open(file.split('.')[0] + '.key', 'wb') as key:
        key.write(p_Key)
  • 两个文件进行异或操作,生成新文件
encryptedFile = bytes (a ^ b for (a, b) in zip(toBeEncryptedFile, otpKey))
    with open(file, 'wb') as encrypted:
        encrypted.write(encryptedFile)
  • 文件加密完成,生成了新的加密文件和加密密钥;密钥保存到自己手里,加密文件就可以传给其他人了;
  • 只需要大概10 行代码,就可以使用 Python 100% 安全地加密自己的手里文件,然后可以放心的发送给别人了;
  • 如果要看原始文件,解密即可

上面加密文件的操作,只用到了os模块,非常简单;而且:

  • 密钥是真正随机的
  • 密钥长度与信息长度相同
  • 密钥基本不会重复

解密文件

解密文件只需要获取加密文件和密钥文件,再次进行异或操作,就可以解密成原来的文件了;

def decryption(file, p_Key):
    encryptedFile = open(file, 'rb').read()
    otpKey = open(p_Key, 'rb').read()
    decryptedFile = bytes (a ^ b for (a, b) in zip(encryptedFile, otpKey))
    with open(file, 'wb') as decrypted:
        decrypted.write(decryptedFile)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。