python crypto模块详解_crypto

crypto模块的目的是为了提供通用的加密和哈希算法。用纯JavaScript代码实现这些功能不是不可能,但速度会非常慢。Nodejs用C/C++实现这些算法后,通过cypto这个模块暴露为JavaScript接口,这样用起来方便,运行速度也快。

MD5和SHA1

MD5是一种常用的哈希算法,用于给任意数据一个“签名”。这个签名通常用一个十六进制的字符串表示:

const crypto = require('crypto');

const hash = crypto.createHash('md5');

// 可任意多次调用update():

hash.update('Hello, world!');

hash.update('Hello, nodejs!');

console.log(hash.digest('hex')); // 7e1977739c748beac0c0fd14fd26a544

update()方法默认字符串编码为UTF-8,也可以传入Buffer。

如果要计算SHA1,只需要把'md5'改成'sha1',就可以得到SHA1的结果1f32b9c9932c02227819a4151feed43e131aca40。

还可以使用更安全的sha256和sha512。

Hmac

Hmac算法也是一种哈希算法,它可以利用MD5或SHA1等哈希算法。不同的是,Hmac还需要一个密钥:

const crypto = require('crypto');

const hmac = crypto.createHmac('sha256', 'secret-key');

hmac.update('Hello, world!');

hmac.update('Hello, nodejs!');

console.log(hmac.digest('hex')); // 80f7e22570...

只要密钥发生了变化,那么同样的输入数据也会得到不同的签名,因此,可以把Hmac理解为用随机数“增强”的哈希算法。

AES

AES是一种常用的对称加密算法,加解密都用同一个密钥。crypto模块提供了AES支持,但是需要自己封装好函数,便于使用:

const crypto = require('crypto');

function aesEncrypt(data, key) {

const cipher = crypto.createCipher('aes192', key);

var crypted = cipher.update(data, 'utf8', 'hex

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 中,`crypto` 模块不是 Python 标准库的一部分,需要额外安装。常用的安装方式是使用 `pip` 包管理器,在终端中执行以下命令即可完成安装: ``` pip install pycrypto ``` 安装完成后,你可以在 Python 代码中使用 `crypto` 模块提供的加密和解密算法。以下是一个使用 `AES` 算法进行加密和解密的示例代码: ```python from Crypto.Cipher import AES import base64 # 加密函数 def encrypt(text, key): # 填充文本 text = text + (16 - len(text) % 16) * chr(16 - len(text) % 16) # 初始化加密器 aes = AES.new(key, AES.MODE_ECB) # 加密 encrypted_text = aes.encrypt(text) # base64 编码 encrypted_text = base64.b64encode(encrypted_text) return encrypted_text # 解密函数 def decrypt(encrypted_text, key): # base64 解码 encrypted_text = base64.b64decode(encrypted_text) # 初始化解密器 aes = AES.new(key, AES.MODE_ECB) # 解密 decrypted_text = aes.decrypt(encrypted_text) # 去除填充 decrypted_text = decrypted_text[:-ord(decrypted_text[-1])] return decrypted_text # 测试 text = 'Hello, world!' key = 'secret key 123' encrypted_text = encrypt(text, key) decrypted_text = decrypt(encrypted_text, key) print('加密前的文本:', text) print('加密后的文本:', encrypted_text) print('解密后的文本:', decrypted_text) ``` 需要注意的是,在使用 `AES` 加密算法时,需要使用一个长度为 16、24 或 32 的密钥,对于不同的密钥长度,使用的加密模式也不同。在上述示例代码中,我们使用的是 `ECB` 模式。如果需要使用其他加密算法或加密模式,你可以查看官方文档或其他相关文档进行学习。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值