编写利用MD5获得哈希值的python程序
时间: 2023-08-07 09:08:17 浏览: 140
以下是一个使用Python中的hashlib模块计算字符串的MD5哈希值的示例程序:
```python
import hashlib
# 输入需要计算哈希值的字符串
input_str = "hello world"
# 创建md5对象
hash_obj = hashlib.md5()
# 更新哈希对象内容
hash_obj.update(input_str.encode())
# 获取哈希值
hash_value = hash_obj.hexdigest()
# 打印哈希值
print("MD5哈希值为:", hash_value)
```
运行该程序,将会输出如下结果:
```
MD5哈希值为: 5eb63bbbe01eeed093cb22bb8f5acdc3
```
请注意,哈希值是对输入字符串的固定长度的压缩输出,因此哈希值是唯一的,即使输入字符串只有微小的变化,哈希值也会有很大的不同。
相关问题
用Python实现一个如下的加密程序:S1. Alice和Bob通过运行Diffie-Hellman密码协商协议生成DES加密密钥。 S2. Alice将自己的公钥发送给Bob S3. Alice将秘密信息加密后传输给Bob S3.1 Alice将秘密信息,利用,加密为; S3.2 Alice利用MD5得到的哈希值; S3.3 Alice将自己的私钥对签名,结果为。 S3.4 Alice将发送给Bob。 S4. Bob解密收到的信息 S4.1 Bob利用MD5的哈希值; S4.2 Bob利用Alice的公钥,验证签名; S4.3 如果,则Break;否则继续进行S4.4; S4.4 利用解密,即可得到秘密消息M。 素数生成过程中可使用标准库,如gmp、BigInteger等。设计好界面(不一定图形),可验证自动生成的密钥和加解密正确的结果。可以的话,采用Socket编程建立Alice和Bob的通信连接。
这是一个非常复杂的安全协议,需要多个步骤才能完成。以下是Python实现的一些基本步骤:
1. 生成两个大素数p和q,其中p是一个安全素数,q是一个小的素数。
2. Alice和Bob通过Diffie-Hellman协议生成共享密钥。他们可以使用Python中的加密库,比如pycryptodome。
3. Alice将自己的公钥发送给Bob,Bob使用该公钥来加密消息。
4. Alice将秘密信息加密、签名和哈希后发送给Bob,Bob使用相同的哈希算法和公钥来验证签名。
5. 如果验证通过,Bob使用共享密钥来解密消息。
以下是一个简单的Python代码示例,演示了上述步骤:
```
import hashlib
import random
from Crypto.Cipher import DES
# 生成素数
def generate_prime_number(bits):
# 使用gmp库生成一个bits位的素数
from gmpy2 import mpz, is_prime
while True:
p = mpz(random.getrandbits(bits))
if is_prime(p):
return p
# Diffie-Hellman密钥交换
def diffie_hellman(p, g):
# 选择一个随机数
a = random.randint(2, p-2)
# 计算公钥
A = pow(g, a, p)
# 返回私钥和公钥
return a, A
# DES加密
def des_encrypt(key, message):
# 使用pycryptodome库进行DES加密
cipher = DES.new(key, DES.MODE_ECB)
return cipher.encrypt(message)
# DES解密
def des_decrypt(key, message):
# 使用pycryptodome库进行DES解密
cipher = DES.new(key, DES.MODE_ECB)
return cipher.decrypt(message)
# 生成密钥
p = generate_prime_number(512)
q = generate_prime_number(64)
g = pow(2, q, p)
alice_private_key, alice_public_key = diffie_hellman(p, g)
bob_private_key, bob_public_key = diffie_hellman(p, g)
shared_key = pow(alice_public_key, bob_private_key, p)
# 加密消息
message = b"Hello, Bob!"
key = hashlib.sha256(str(shared_key).encode()).digest()[:8]
encrypted_message = des_encrypt(key, message)
# 签名和哈希
hash_value = hashlib.md5(message).hexdigest()
signature = hashlib.sha256(str(alice_private_key).encode() + hash_value.encode()).hexdigest()
# 发送消息
message_data = {
"encrypted_message": encrypted_message,
"hash_value": hash_value,
"signature": signature
}
# 接收消息
received_message_data = message_data.copy()
# 验证签名
signature_to_check = received_message_data["signature"]
hash_value_to_check = received_message_data["hash_value"]
public_key_to_check = alice_public_key
if signature_to_check != hashlib.sha256(str(public_key_to_check).encode() + hash_value_to_check.encode()).hexdigest():
print("Signature verification failed!")
else:
# 解密消息
encrypted_message_to_decrypt = received_message_data["encrypted_message"]
key_to_decrypt = hashlib.sha256(str(shared_key).encode()).digest()[:8]
decrypted_message = des_decrypt(key_to_decrypt, encrypted_message_to_decrypt)
print("Decrypted message:", decrypted_message)
```
当然,以上代码只是基本的示例,实际上实现一个完整的加密程序需要更多的细节和安全措施。同时,如果想要使用Socket编程建立Alice和Bob的通信连接,还需要编写一些额外的代码来实现网络通信。
用python编写提取文件哈希值特征码的程序。
好的,以下是一个简单的Python程序,可以通过 hashlib 库计算文件的哈希值特征码:
```python
import hashlib
def get_file_hash(file_path):
# 以二进制方式读取文件内容
with open(file_path, 'rb') as f:
data = f.read()
# 计算文件的MD5哈希值,并转换成16进制表示
hash_md5 = hashlib.md5(data).hexdigest()
# 计算文件的SHA1哈希值,并转换成16进制表示
hash_sha1 = hashlib.sha1(data).hexdigest()
# 计算文件的SHA256哈希值,并转换成16进制表示
hash_sha256 = hashlib.sha256(data).hexdigest()
return hash_md5, hash_sha1, hash_sha256
# 示例,计算文件 "example.txt" 的哈希值特征码
md5, sha1, sha256 = get_file_hash('example.txt')
print("MD5:", md5)
print("SHA1:", sha1)
print("SHA256:", sha256)
```
这个程序会计算文件的 MD5、SHA1 和 SHA256 哈希值,并以16进制的形式输出。你可以将 `example.txt` 替换成你自己的文件路径,以计算该文件的哈希值特征码。
阅读全文