美文网首页物联网路由联盟物联网loT从业者
6-python库之-md5 base64 AES RSA加密算

6-python库之-md5 base64 AES RSA加密算

作者: Creator_Ly | 来源:发表于2020-03-07 10:48 被阅读0次

在做一些网络传输的时候会对数据进行加密,这边例举一些常用的加密算法

1.md5

1.字符串md5

import hashlib


if __name__ == '__main__':
    username = "test"
    username_md5 = hashlib.md5(username.encode(encoding='UTF-8')).hexdigest()
    print(username_md5)

hashlib里面还有sha的各种加密方式,调用跟md5一样,只要把md5换成sha1就可以,可以自己尝试。

2.文件md5

import hashlib

if __name__ == '__main__':

    username = "./test.txt"

    m = hashlib.md5()
    n = 1024 * 4
    inp = open(username, 'rb')
    while True:
        buf = inp.read(n)
        if buf:
            m.update(buf)
        else:
            break
    print(m.hexdigest())
    

2.base64

base64的加密方式

import base64


if __name__ == '__main__':
    username = "test"
    username_encode = base64.b64encode(username.encode(encoding='UTF-8'))
    print(username_encode)
    username_decode = base64.b64decode(username_encode)
    print(username_decode)
    

3.AES

  • 秘钥:加密的时候用秘钥,解密的时候需要同样的秘钥才能解出来
  • 明文:需要加密的参数
  • 模式:aes 加密常用的有 ECB 和 CBC 模式(我只用了这两个模式,还有其他模式)
  • iv 偏移量:这个参数在 ECB 模式下不需要,在 AES 模式下需要
  1. AES CBC 加密:
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex


# 如果text不足16位的倍数就用空格补足为16位
def add_to_16(text):
    if len(text.encode('utf-8')) % 16:
        add = 16 - (len(text.encode('utf-8')) % 16)
    else:
        add = 0

    text = text + ('\0' * add)
    return text.encode('utf-8')


# 加密函数
def encrypt(text):
    key = '9999999999999999'.encode('utf-8')
    mode = AES.MODE_CBC
    iv = b'qqqqqqqqqqqqqqqq'
    text = add_to_16(text)
    cryptos = AES.new(key, mode, iv)
    cipher_text = cryptos.encrypt(text)
    # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
    return b2a_hex(cipher_text)


# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):
    key = '9999999999999999'.encode('utf-8')
    iv = b'qqqqqqqqqqqqqqqq'
    mode = AES.MODE_CBC
    cryptos = AES.new(key, mode, iv)
    plain_text = cryptos.decrypt(a2b_hex(text))
    return bytes.decode(plain_text).rstrip('\0')


if __name__ == '__main__':
    e = encrypt("hello world")  # 加密
    d = decrypt(e)  # 解密
    print("加密:", e)
    print("解密:", d)

2.AES ECB加密

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex


def add_to_16(text):
    if len(text.encode('utf-8')) % 16:
        add = 16 - (len(text.encode('utf-8')) % 16)
    else:
        add = 0
    text = text + ('\0' * add)
    return text.encode('utf-8')


# 加密函数
def encrypt(text):
    key = '9999999999999999'.encode('utf-8')
    mode = AES.MODE_ECB
    text = add_to_16(text)
    cryptos = AES.new(key, mode)

    cipher_text = cryptos.encrypt(text)
    return b2a_hex(cipher_text)


# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):
    key = '9999999999999999'.encode('utf-8')
    mode = AES.MODE_ECB
    cryptor = AES.new(key, mode)
    plain_text = cryptor.decrypt(a2b_hex(text))
    return bytes.decode(plain_text).rstrip('\0')


if __name__ == '__main__':
    e = encrypt("hello world")  # 加密
    d = decrypt(e)  # 解密
    print("加密:", e)
    print("解密:", d)

4.RSA

rsa的加解密需要公钥私钥,一般客户端使用公钥进行加密,服务器使用私钥进行解密,验证合法性。

在ubuntu上面执行上面两个命令,即可产生private.key和public.key两个文件

openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key

使用上面两个文件进行加解密测试,如下:

import rsa


if __name__ == '__main__':
    username = "test"
    with open("./public.key", mode="rb") as f:
        public_key = f.read()

    pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(public_key)
    username_rsa = rsa.encrypt(username.encode(), pubkey)
    print(username_rsa.hex())
    print(len(username_rsa))

    with open("./private.key", mode="rb") as f:
        private_key = f.read()

    prikey = rsa.PrivateKey.load_pkcs1(private_key)
    username = rsa.decrypt(username_rsa, prikey)
    print(username)

相关文章

  • iOS 关于加密

    常见的iOS代码加密常用加密方式包括Base64加密、MD5加密、AES加密、RSA加密等。 Base64加密 B...

  • iOS加密

    iOS代码常见的加密方式包括MD5加密、AES加密、BASE64加密,RSA加密。 MD5加密 MD5是不可逆的只...

  • 数据加密--学习

    常用加密算法 AES MD5 BASE64 RSA DES 3DES RC4 对称加密 des,3des,aes非...

  • 数据加密工具类集合

    1.引入依赖 AES加、解密算法工具类 Base64加密解密 工具类 DES工具类 MD5工具类 RSA加、解密算...

  • python加解密详情

    一、python加密方式 目前python支持的加密有一下几种方式: md5 base64 AES RSA 注意:...

  • 6-python库之-md5 base64 AES RSA加密算

    在做一些网络传输的时候会对数据进行加密,这边例举一些常用的加密算法 1.md5 1.字符串md5 hashlib里...

  • 玩转iOS常用加密模式

    iOS常用的加密方式 Base64加密 MD5加密 AES加密 RSA加密 直接上干货,理论性的知识,大家从网上自...

  • android使用openssl实现C++与JAVA互相RSA,

    这里主要是openssl常用的编码Base64, 摘要算法MD5,对称加密AES, 非对称加密RSA与Java互通...

  • iOS安全/代码混淆

    APP 一般经常做的网络参数加密解密,加密方法有base64、MD5、AES、RSA、DES等加密方法、这些加密一...

  • Android面试

    3. 加密算法有哪些?对称加密和非对称加密的区别? MD5,SHA1,Base64,RSA,AES,DES 非对称...

网友评论

    本文标题:6-python库之-md5 base64 AES RSA加密算

    本文链接:https://www.haomeiwen.com/subject/wsdqdhtx.html