最近老师布置了两个加密的作业,记录一下编码过程及遇到的问题。

对于RSA解密基本内容这里就不赘述,直接说一下编码过程把:

1:N = p*q(p、q互质,即公约数只有1)可以用辗转相除去判断

2:L是p-1和q-1的最小公倍数。如果减一后仍互质,则为乘积。否则最小公倍数=两数的乘积/最大公约数

3:求E:1<E<L并且要满足E,L互质

4:求D:1<E<L 并且要满足E*D mod L =1

公钥为(e,n) 私钥为(d,n)

被加密数据为x,则x' = x^e mod n  解密:x=x'^d mod n。可用快速幂取模进行简化操作

快速幂取模和辗转相除可自行百度

在加密和解密的时候一定要注意数据长度和密钥长度的关系,RSA算法限制数据长度不能超过密钥长度,所以对长数据加密的时候就要进行分片,对没一部分分别加密然后再组装起来,这个问题用面向对象语言的分片很容易就可以解决。

注:苦于数据长度的限制,笔者觉得最好用面向对象语言去编写,java的大数,和python都是不错的选择,这样码代码的过程中就不用在担心数据长度的问题。笔者学生一枚,大牛轻喷。

#辗转相除判断互质
def judge(n,m):t = 0while m>0:t = n%mn = mm = tif n == 1:return 1else :return 0#快速幂取模:b^e%m
def PowMod(b,e,m): result = 1while e != 0:if (e&1) == 1:result = (result * b) % me >>= 1b = (b*b) % mreturn result
def lcm(a, b):for i in range(min(a,b),0,-1):if a % i ==0 and b % i == 0:return a*b//i
def main():p,q = map(int,input().split())n = p*qif judge(p-1,q-1):L = (p-1)*(q-1)else:L = lcm(p-1,q-1)for i in range(2,L):if judge(i,L) == 1:e = ibreakfor i in range(2,L):if e*i%L == 1:d = ibreakprint("public_key:"+str(e)+","+str(n))print("private_key:"+str(d)+","+str(n))Array = []Result=""decode=""Key = str(n)Key_Len = len(Key)original = input("Numbers:")original_len = len(original)while Key_Len < original_len:  #分片flag = original[0:Key_Len]original = original[Key_Len:original_len]Array.append(str(PowMod(int(flag),e,n)))original_len = len(original)Array.append(str(PowMod(int(original),e,n)))for i in Array:decode += str(PowMod(int(i),d,n))#print("i"+str(i))Result += str(i)print("result:"+Result)print("decode:"+decode)
main()

测试结果:

================================================================================================

AES对称加密:

直接用python自带的库文件写的,对txt文件加密

#
#AES对称加密
#对同一路径下的文件进行加密,随机生成16位密钥,加密结果保存在同目录下
#import random
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hexdef encryption(file,key):message = filemode = AES.MODE_OFBcryptor = AES.new(key.encode('utf-8'), mode, b'0000000000000000')length = 16count = len(message)if count % length != 0:add = length - (count % length)else:add = 0message = message + ('\0' * add)ciphertext = cryptor.encrypt(message.encode('utf-8'))result = b2a_hex(ciphertext)with open("jiemi.txt",'w+') as f:f.write(result.decode('utf-8'))print("加密成功")#print(result.decode('utf-8'))def deciphering(file,key):result = filemode = AES.MODE_OFBcryptor = AES.new(key.encode('utf-8'), mode, b'0000000000000000')plain_text = cryptor.decrypt(a2b_hex(result))print(plain_text.decode('utf-8').rstrip('\0'))def Key():#生成16位密钥Str = ""for i in range(16):K = random.choice('1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')Str += Kreturn Strif __name__ == "__main__":while(1):i = int(input("1:加密 2.解密 其他:退出\n"))if i == 1:file_name = input("请输入加密文件名:")File = open(file_name)f = File.read()key = Key()print("密钥:"+key)encryption(f,key)elif i == 2:file_name = input("请输解密文件名:")File = open(file_name,'r+')f = File.read()#print(f)key = input("请输入密钥:")deciphering(f,key)else:break

RSA加密及AES对称加密代码实现相关推荐

  1. Python代码实现MD5、AES对称加密和RSA非对称加密以及OpenSSl实践

    1.MD5加密算法 1.1 MD5加密的特点 不可逆运算 对不同的数据加密的结果是定长的32位和16位字符(不管文件多大都一样) 对相同的数据加密,得到的结果是一样的(也就是复制). 抗修改性 :信息 ...

  2. RSA(非对称)+AES(对称加密)前后台交互

    前言:    为了提高安全性采用了RSA,但是为了解决RSA加解密性能问题,所以采用了RSA(非对称)+AES(对称加密)方式,如果只考虑其中一种的,可以去看我前面两篇文章,专门单独写的demo,可以 ...

  3. 正确使用AES对称加密

    正确使用AES对称加密 经常我看到项目中有人使用了对称加密算法,用来加密客户或项目传输中的部分数据.但我注意到开发 人员由于不熟悉原理,或者简单复制网上的代码示例,有导致代码存在安全风险. 我经常遇到 ...

  4. 编写ATL工程实现ActiveX控件调用cryptoAPI接口(三)------------AES对称加密与解密

    注:下面的代码中用了Map,Base64,log,Result等都为自定义类型,太长就不一一贴出. [cpp]  view plain  copy  print ? /* * * * 文件名称:Enc ...

  5. 17.app后端如何保证通讯安全--aes对称加密

    在上文<16.app后端如何保证通讯安全--url签名>提到,url签名有两个缺点,这两个缺点,如果使用对称加密方法的话,则完全可以避免这两个缺点.在本文中,会介绍对称加密的具体原理,和详 ...

  6. 【C 语言】文件操作 ( 文件加密解密 | 加密解密原理 | 对称加密 | 非对称加密 | 散列函数 )

    文章目录 一.加密类型 二.加密解密三要素 三.加密应用场景 四.散列函数 一.加密类型 数据加密操作 分为 对称加密 和 非对称加密 ; 对称加密 : 加密密钥 与 解密密钥 相同 ; 非对称加密 ...

  7. 【安全加密技术】 对称加密

    转载请注明出处:http://blog.csdn.net/sk719887916/article/details/46822663 上篇了解了<非对称加密>后 今天我来继续了解下加密技术中 ...

  8. 对称加密(4) NET对称加密实践

    对称加密(4) NET对称加密实践 在使用.NET框架提供的加密算法实现类来执行加密任务时,需要准备加密密钥和初始化向量(Initialization Vector,IV).基于对称加密的特点,在加密 ...

  9. 古典密码学、DES对称加密、3DES对称加密知识总结和实验

    实验三.古典密码学.DES对称加密.3DES对称加密 一.古典密码学:当铺密码.培根密码.摩斯密码.键盘密码.与佛论禅 1.当铺密码: 解密"由人俱一口中"和"大中口由人 ...

最新文章

  1. termux python 打开摄像头_【图片】将termux打造成合格的python环境(假装是教程贴)_termux吧_百度贴吧...
  2. 经过研究发现。c++里面的const意思是说,我是const,成员也是const!!!
  3. Python源码剖析[16] —— Pyc文件解析
  4. 线程同步--线程间通信
  5. 使用PostgREST的RestAPI操作之角色系统教程
  6. 网管师职业规划(3)
  7. python26个保留字,Python保留字(关键字)一览表
  8. 彩扩机项目--散热马达驱动部分
  9. 京东商品评论分析(爬虫+分词+词云图)
  10. gmail真心用不惯啊
  11. 虚拟机软件有哪些?分别有哪些作用?
  12. 计算机中丢失Smtpemail,SMTP和ESMTP错误代码列表
  13. 基于simulink采用 QSHB 和 HBPS 算法的混合 MIMO 波束成形仿真
  14. osgEarth编译
  15. 小试跨平台局域网文件传输工具NitroShare,几点感想
  16. 如何更换 macOS Mojave 登陆界面背景图?
  17. 手机上怎么打开md格式的文件_一键就能将PDF转换为各种格式文件,无奈知道的人实在太少了...
  18. 利用matplotlib绘制圆环图的案例
  19. IBM收购了Redhat,转身就卖掉了自己的重要软件......
  20. 绘图杂记【8】echarts象形图,圆环图

热门文章

  1. 名帖49 王羲之 小楷《黄庭经》
  2. EasyX安装与使用
  3. 【等保小知识】等保、分保以及关保分别是什么意思?
  4. 你的睡眠时间和睡眠质量达标了么?
  5. 桌面壁纸 Lively wallpape
  6. 杜静20176395
  7. Mac键盘修改F1-F12为功能键,神器karabiner-elements
  8. Ubuntu下安装NS-3图文教程
  9. 洛谷P3387 【模板】缩点(tarjan)
  10. proxifier安装激活使用