【Python】使用Python实现sha256、md5等加密算法生成哈希值

1. hashlib库

利用python的hashlib库,可以实现使用sha256md5等加密算法生成哈希值。

1.1 hash对象

hash对象描述
md5()md5算法加密
sha1()sha1算法加密
sha224()sha224算法加密
sha256()sha256算法加密
sha384()sha384算法加密
sha512()sha512算法加密

1.2 hash对象的方法

方法描述
copy()复制一个hash对象
digest()返回bytes类型的hash值
hexdigest()返回str类型的hash值
update()传入编码后的字符串

2. 使用sha256生成哈希值

2.1 生成字符串的哈希值

from hashlib import sha256
 
def generate_sha256_hashCode(plainText):
    plainTextBytes = plainText.encode('utf-8') # 字符串在哈希之前,需要编码
    encryptor = sha256()      
    encryptor.update(plainTextBytes)   
    hashCode = encryptor.hexdigest() 
    print(hashCode)
 
if __name__ == "__main__":
    generate_sha256_hashCode('123')

运行结果:

a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3

2.2 生成文件的哈希值

from hashlib import sha256
 
def generate_sha256_hashCode(filePath):
    with open(filePath, encoding="utf-8") as f:
        plainText = f.read()
    plainTextBytes = plainText.encode('utf-8')
    encryptor = sha256()   
    encryptor.update(plainTextBytes) 
    hashCode = encryptor.hexdigest() 
    print(hashCode)
 
if __name__ == "__main__":
    generate_sha256_hashCode('test.txt')

3. 使用md5生成哈希值

使用md5或其他算法,同sha256,只需要改动以下两行即可:

from hashlib import 算法名
encryptor = 算法名()

3.1 生成字符串的哈希值

from hashlib import md5
 
def generate_md5_hashCode(plainText):
    plainTextBytes = plainText.encode('utf-8') 
    encryptor = md5()   
    encryptor.update(plainTextBytes) 
    hashCode = encryptor.hexdigest() 
    print(hashCode)
 
if __name__ == "__main__":
    generate_md5_hashCode('123')

运行结果:

202cb962ac59075b964b07152d234b70

3.2 生成文件的哈希值

from hashlib import md5
 
def generate_md5_hashCode(filePath):
    with open(filePath, encoding="utf-8") as f:
        plainText = f.read()
    plainTextBytes = plainText.encode('utf-8')
    encryptor = md5()   
    encryptor.update(plainTextBytes) 
    hashCode = encryptor.hexdigest() 
    print(hashCode)
 
if __name__ == "__main__":
    generate_md5_hashCode('test.txt')

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SHA-256哈希算法是一种加密算法,用于将任意长度的消息转换为一个长度为256位的哈希值。下面是一个Python实现,该实现使用任何函数库直接实现SHA-256哈希算法。 ```python import math # 初始化常量 h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ] k = [ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 ] # 定义一些辅助函数 def rotr(x, n): return (x >> n) | (x << (32 - n)) def shr(x, n): return x >> n def ch(x, y, z): return (x & y) ^ (~x & z) def maj(x, y, z): return (x & y) ^ (x & z) ^ (y & z) def sigma0(x): return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22) def sigma1(x): return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25) def gamma0(x): return rotr(x, 7) ^ rotr(x, 18) ^ shr(x, 3) def gamma1(x): return rotr(x, 17) ^ rotr(x, 19) ^ shr(x, 10) # 定义SHA-256哈希函数 def sha256(message): # 对消息进行预处理 message = bytearray(message) ml = len(message) * 8 message.append(0x80) while (len(message) * 8) % 512 != 448: message.append(0x00) message += ml.to_bytes(8, byteorder='big') # 初始化哈希值 hash_values = h.copy() # 对消息进行分组 for i in range(0, len(message), 64): # 将每个分组划分为16个字 words = [int.from_bytes(message[j:j+4], byteorder='big') for j in range(i, i+64, 4)] # 扩展16个字为64个字 for j in range(16, 64): s0 = gamma0(words[j-15]) s1 = gamma1(words[j-2]) words.append((words[j-16] + s0 + words[j-7] + s1) & 0xffffffff) # 初始化临时变量 a, b, c, d, e, f, g, h = hash_values # 进行64轮的压缩 for j in range(64): S1 = sigma1(e) ch_val = ch(e, f, g) temp1 = (h + S1 + ch_val + k[j] + words[j]) & 0xffffffff S0 = sigma0(a) maj_val = maj(a, b, c) temp2 = (S0 + maj_val) & 0xffffffff h = g g = f f = e e = (d + temp1) & 0xffffffff d = c c = b b = a a = (temp1 + temp2) & 0xffffffff # 更新哈希值 hash_values[0] = (hash_values[0] + a) & 0xffffffff hash_values[1] = (hash_values[1] + b) & 0xffffffff hash_values[2] = (hash_values[2] + c) & 0xffffffff hash_values[3] = (hash_values[3] + d) & 0xffffffff hash_values[4] = (hash_values[4] + e) & 0xffffffff hash_values[5] = (hash_values[5] + f) & 0xffffffff hash_values[6] = (hash_values[6] + g) & 0xffffffff hash_values[7] = (hash_values[7] + h) & 0xffffffff # 将哈希值转换为16进制字符串 return ''.join(format(hv, '08x') for hv in hash_values) ``` 使用示例: ```python message = b'Hello, world!' print(sha256(message)) # 输出:b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值