应用密码学实验四 公钥密码体制(一) 一、实验目的 体验公钥算法的不对称性。 二、实验要求 (1)寻找两个大素数 参考代码: import math def isPrime(num): if num<2: return False for i in range(2,int(math.sqrt(num))+1): if num%i==0: return False return True for m in range(100000000,100000100): if isPrime(m): print(m) (2)对一个数进行因式分解参考代码: import math import datetime starttime = datetime.datetime.now() m=10000013000003969 for i in range(2,int(math.sqrt(m))+1): if m%i==0: print(i) endtime = datetime.datetime.now() print ('运行时间为:',(endtime - starttime).seconds,'秒') 三、实验内容 1、找两个9位数的大素数,寻找范围为如下规则,例如你的学号的尾部两数字为01,则你寻找的范围为10000001000-10000001999,学号为5则寻找的范围为1000005000-10000005999。选取两个A=( ) 、 B=( ) 2、将A与B相乘得到C,C= ( ) 运行时间=( ) 3、将C进行因式分解,运行时间=( ) 4、将你的搜索范围提高即在学号前再加一个0,例如:100000001000-100000001999 5、重复2和3步,记录下系统运行的时间。 6、结论:计算上的不对称性,验证你的结果。
时间: 2023-12-01 12:03:49 浏览: 93
很抱歉,我是一个语言模型AI,无法进行实验操作。不过我可以给你提供一些帮助和指导。
根据你的学号尾部数字,可以得到你需要寻找的素数范围,使用代码可以找到两个大素数A和B。将A和B相乘得到C,然后对C进行因式分解,可以得到C的质因数分解式,记录下运行时间。
接下来,将搜索范围扩大,即在学号前再加一个0,重新进行步骤2和3,比较两次运行时间,验证公钥算法的不对称性。
需要注意的是,公钥密码体制需要选取足够大的素数,才能保证安全性。实际应用中,通常选取长度为1024位或2048位的素数进行加密。
相关问题
公钥密码体制的研究与应用
公钥密码体制是指在加密和解密过程中使用不同的密钥,其中一个密钥是公开的,即公钥,另一个密钥是保密的,即私钥。这种密码体制的研究始于上世纪70年代,是现代密码学中的一项重要成果。
公钥密码体制相对于传统的对称密钥密码体制具有很多优点,例如不需要密钥分发、密钥管理更加方便、安全性更高等。因此,公钥密码体制在网络通信、电子商务、数字签名等领域得到了广泛应用。
目前,公钥密码体制已经成为了现代密码学的基础,并在很多领域得到了应用。例如,在电子商务中,公钥密码体制可以保护用户的隐私信息;在数字签名中,公钥密码体制可以验证数字签名的真实性和完整性;在虚拟私人网络中,公钥密码体制可以保证通信的安全性等等。
总之,公钥密码体制是一种非常重要的密码学技术,其研究和应用将会在未来的信息时代中扮演着越来越重要的角色。
将古典密码算法、对称密码算法、公钥密码算法和单向散列算法的实现附带源代码
密码学中的算法种类繁多,包括古典密码、对称密钥加密、非对称密钥加密(公钥)以及单向散列函数。由于这些算法的具体实现涉及大量代码,并且源代码可能因编程语言和库的不同而有所差异,这里我将提供一个概述,但不会直接给出完整的源代码。
1. **古典密码**:如Caesar Cipher(凯撒密码)和Vigenère Cipher(维吉尼亚密码),它们通常手动实现,没有现代加密库中的复杂性和安全性。在Python中,可以这样简单实现Caesar Cipher:
```python
def caesar_cipher(text, shift):
encrypted_text = ""
for char in text:
if char.isalpha():
shift_amount = shift % 26
if char.islower():
new_char = chr((ord(char) - ord('a') + shift_amount) % 26 + ord('a'))
else:
new_char = chr((ord(char) - ord('A') + shift_amount) % 26 + ord('A'))
encrypted_text += new_char
else:
encrypted_text += char
return encrypted_text
```
2. **对称密钥加密**:如AES(高级加密标准)使用的是相同的密钥进行加密和解密。你可以使用像PyCryptodome这样的库,但它包含了大量的代码:
```python
from Crypto.Cipher import AES
key = b'Sixteen byte key'
cipher = AES.new(key, AES.MODE_ECB)
plaintext = b'This is a secret message'
ciphertext = cipher.encrypt(plaintext)
```
3. **公钥密码算法**(如RSA)涉及到一对密钥:公钥用于加密,私钥用于解密。Python中的`cryptography`库可以实现这个:
```python
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization
key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = key.public_key()
message = b'This is an encrypted message'
encrypted_message = public_key.encrypt(message, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))
```
4. **单向散列函数**(如SHA-256)用于数据完整性检查,不提供可逆的加密。Python的`hashlib`模块有实现:
```python
import hashlib
hash_object = hashlib.sha256(b'This is a message')
hash_value = hash_object.hexdigest()
```
阅读全文