以姓名+学号为消息内容,使用md5和vigenere加密和解密方法,模拟直接数字签名方法实现过程
时间: 2024-10-25 11:15:38 浏览: 24
Vigenere-Crypto:这是一个应用程序,可以使用Vigenere的方法来加密和解密消息
在MD5和Vigenère密码技术结合下,模拟直接数字签名的过程可以分为以下几个步骤:
1. **消息准备**:
- 用户输入姓名(例如张三)和学号(例如001),构成原始消息:`姓名张三 学号001`。
2. **MD5哈希**:
- 使用MD5算法对字符串进行哈希处理,生成一个固定长度的十六进制摘要。MD5的主要目的是保证信息的唯一性和完整性,而不是提供保密性。
```python
import hashlib
raw_message = "姓名张三 学号001"
md5_hash = hashlib.md5(raw_message.encode('utf-8')).hexdigest()
```
3. **Vigenère加密**:
- Vigenère密码是一种简单的替换式密码,需要一个密钥。这里我们可以使用用户的姓名作为密钥,因为它是独一无二的。
- 将MD5哈希结果和密钥按照字母表顺序对应,进行字符替换。如果密钥不够长,则循环使用直到达到哈希结果的长度。
```python
def vigenere_cipher(message, key):
cipher_text = ""
for i in range(len(message)):
cipher_text += chr((ord(message[i]) + ord(key[i % len(key)])) % 26 + ord('A'))
return cipher_text
vigenere_key = "张三"
encrypted_message = vigenere_cipher(md5_hash, vigenere_key)
```
4. **数字签名**:
- 对加密后的消息再次使用MD5进行哈希,得到最终的数字签名,用于验证消息来源。
```python
signature = hashlib.md5(encrypted_message.encode('utf-8')).hexdigest()
```
5. **验证**:
- 接收方接收到用户名、加密后的消息以及签名后,同样计算Vigenère加密和两次MD5哈希,对比发送者的签名是否匹配,以确认信息的真实性。
注意:虽然这个例子演示了如何结合MD5和Vigenère加密进行数字签名,但在实际应用中,更安全的选择可能是使用公钥加密系统如RSA或椭圆曲线加密(ECC)来进行数字签名,因为MD5已知有碰撞风险,不适合用于安全性要求高的场景。
阅读全文