计算机安全学第四次实践性作业
一、用Python或Sage实现RSA算法的加密、解密、签名/验证签名
1、源代码
一开始文件取名为“rsa”,运行时出错,之后改为其它就运行正常了。
import rsa
# 生成密钥
(pubkey, privkey) = rsa.newkeys(1024)
# 保存密钥
with open('public.txt','w+') as f:
f.write(pubkey.save_pkcs1().decode())
with open('private.txt','w+') as f:
f.write(privkey.save_pkcs1().decode())
# 导入密钥
with open('public.txt','r') as f:
pubkey = rsa.PublicKey.load_pkcs1(f.read().encode())
with open('private.txt','r') as f:
privkey = rsa.PrivateKey.load_pkcs1(f.read().encode())
# 明文
message = 'hello world'
# 公钥加密
crypto = rsa.encrypt(message.encode(), pubkey)
print("密文为:",crypto)
# 私钥解密
message = rsa.decrypt(crypto, privkey).decode()
print("密文为:",message)
# 私钥签名
signature = rsa.sign(message.encode(), privkey, 'SHA-1')
# 公钥验证
aa = rsa.verify(message.encode(), signature, pubkey)
print("签名为:",aa)
2、运行截图
文章图片
二、用Python或Sage实现DH秘钥交换协议的。
输入一个数,判断是否为素数。
若非素数则重新输入,若是素数则计算它的一个本原根。
A、B随机生成密钥,并计算相应的公钥。
A、B交换公钥后,双方均计算出公共的密钥。
1、源代码
import random
import math
#素数的判断
def judge_prime(p):
if p <= 1:
return False
i = 2
while i * i <= p:
if p % i == 0:
return False
i += 1
return True
#得到所有的原根
def get_generator(p):
a = 2
list = []
while a < p:
flag = 1
while flag != p:
if (a ** flag) % p == 1:
break
flag += 1
if flag == (p - 1):
list.append(a)
a += 1
return list
#A,B得到各自的计算数
def get_calculation(p, a, X):
Y = (a ** X) % p
return Y
#A,B得到交换计算数后的密钥
def get_key(X, Y, p):
key = (Y ** X) % p
return key
if __name__ == "__main__":
#得到规定的素数
flag = False
while flag == False:
print('输入一个素数: ', end = '')
p = input()
p = int(p)
flag = judge_prime(p)
print(str(p) + ' 是素数 ')
#得到素数的一个原根
list = get_generator(p)
print(str(p) + ' 的一个原根为:', end = '')
print(list[-1])
#得到A、B的私钥
XA = random.randint(0, p-1)
print('A选择密钥XA:',XA)
XB = random.randint(0, p-1)
print('B选择密钥XB:',XB)
#计算A、B相应的公钥
YA = get_calculation(p, int(list[-1]), XA)
print('A计算YA:',YA)
YB = get_calculation(p, int(list[-1]), XB)
print('B计算YB:',YB)
#A、B交换公钥后,计算出公共的密钥
KA = get_key(XA, YB, p)
print('A计算公共的密钥KA:',KA)
KB = get_key(XB, YA, p)
print('B计算公共的密钥KB:',KB)
2、运行截图
【计算机安全学第四次实践性作业】
文章图片
推荐阅读
- 慢慢的美丽
- 开学第一天(下)
- 奔向你的城市
- 学无止境,人生还很长
- 由浅入深理解AOP
- “成长”读书社群招募
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议
- 小影写在2018九月开学季