- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
一、实验目的及任务
利用对称密码技术、非对称密码技术设计机密性服务应用。具体是选择如下任务之一或多项。
1、按如下具体过程实现数字信封应用:
(1)甲使用对称密钥对明文进行加密,生成密文信息。
(2)甲使用乙的公钥加密对称密钥,生成数字信封。
(3)甲将数字信封和密文信息一起发送给乙。
(4)乙接收到甲的加密信息后,使用自己的私钥打开数字信封,得到对称密钥。
(5)乙使用对称密钥对密文信息进行解密,得到最初的明文。
2、用图形界面或动画的形式,显示数字信封应用的具体过程。
3、增加哈希等算法应用,实现数据机密性、完整性、不可否认性服务。
二、实验环境
1、本地主机
2、编程工具(Java、C或其他语言)
三、实验方案/过程
任务1:编程演示数字信封的产生及解封过程,发送方产生数字信封,接收方解封数字信封获取信息。
任务2、3:编程演示具体过程。
四、思考题
1、数字信封技术为何要同时使用对称加密和非对称加密算法?
对称加密只需要一个密钥即可传输效率高,但是密钥管理困难,一旦密钥被截获就容易被破解,但是非对称加密使用两把不同的密钥,解决了对称加密密钥分发的难题,安全性高,但是速度较慢,通过将两种密钥技术的结合可以更高效、安全的加密数据。
2、实验中使用了哪种对称加密、非对称加密算法?(以及哈希算法?)
对称加密算法:AES、密钥长度:256位
非对称加密算法:RSA、密钥长度:2048位
哈希算法:SHA-256
3、画出程序流程图、附上关键代码,并对代码进行注释说明。
#生成甲的RSA密钥对
defgenerate_keys():
#生成RSA私钥和公钥
private_key=rsa.generate_private_key(
public_exponent=65537,#公钥指数
key_size=2048,#密钥长度
backend=default_backend()#使用默认的后端
)
public_key=private_key.public_key()#从私钥生成公钥
returnprivate_key,public_key
----------------------------------------------------------------------------------------------------------------
#生成乙的密钥对
defgenerate_keys():
#生成RSA私钥和公钥
private_key=rsa.generate_private_key(
public_exponent=65537,#公钥指数
key_size=2048,#密钥长度
backend=default_backend()#使用默认的后端
)
public_key=private_key.public_key()#从私钥生成公钥
returnprivate_key,public_key
----------------------------------------------------------------------------------------------------------------
#使用AES加密消息
defencrypt_message(message,session_key):
#生成随机的初始化向量(IV)
iv=os.urandom(16)
#创建AES加密器,使用CFB模式
cipher=Cipher(algorithms.AES(session_key),modes.CFB(iv),backend=default_backend())
encryptor=cipher.encryptor()
#使用PKCS7填充方式将消息填充到AES块大小
padder=sym_padding.PKCS7(algorithms.AES.block_size).padder()
padded_data=padder.update(message.encode())+padder.finalize()
#加密消息
ciphertext=encryptor.update(padded_data)+encryptor.finalize()
returniv+ciphe
文档评论(0)