当前位置:   article > 正文

Python3 与 VUE的 AES加密解密_vue base64加密,python解密

vue base64加密,python解密

目录

简介

VUE的AES加密

Python AES加密

注意


密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一 [1]  。该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijdael之名命之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhine doll"。)(摘取百度百科)

简介

AES拥有很多模式,而此次采用的CBC模式:用key和iv(初始向量,加密第一块明文), 再加上扰码(随机数)(由于楼主比较懒,这里只列CBC和ECB的例子)

VUE的AES加密

  •  在vue项目中index.html引入crypto
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>
  • 在webpack.base.conf.js修改
  1. externals:{
  2. 'crypto':'Crypto',
  3. },
  • 在src目录下创建文件index.js
  1. /**
  2. * 工具类
  3. */
  4. export default {//加密
  5. set(word, keyStr){
  6. keyStr = keyStr ? keyStr : 'abcdefghijklmnop';
  7. var key = CryptoJS.enc.Utf8.parse(keyStr);//Latin1 w8m31+Yy/Nw6thPsMpO5fg==
  8. var srcs = CryptoJS.enc.Utf8.parse(word);
  9. var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
  10. return encrypted.toString();
  11. },
  12. //解密
  13. get(word, keyStr){
  14. keyStr = keyStr ? keyStr : 'abcdefghijklmnop';
  15. var key = CryptoJS.enc.Utf8.parse(keyStr);//Latin1 w8m31+Yy/Nw6thPsMpO5fg==
  16. var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
  17. return CryptoJS.enc.Utf8.stringify(decrypt).toString();
  18. }
  19. }
  • 在需要使用的页面中导入
  1. import Crypto from "@/index";
  2. let str = Crypto.get("好好学习")
  3. console.log("暗文:" + str)
  4. let str1 = Crypto.set(str)
  5. console.log("明文: " + str1)

Python AES加密

  • 下载依赖库pycryptodome,请手动输入下载,之前默认的库已经over了
pip install pycryptodome
  • 若仍导入失败,在site-packages目录下手动修改crypto文件名为Crypto,没错,没有看错,手动修改
  1. from Crypto.Cipher import AES
  2. import base64
  3. from Crypto.Util.Padding import pad
  4. class AesCrypt:
  5. def __init__(self, model, iv, encode_, key='abcdefghijklmnop'):
  6. self.encrypt_text = ''
  7. self.decrypt_text = ''
  8. self.encode_ = encode_
  9. self.model = {'ECB': AES.MODE_ECB, 'CBC': AES.MODE_CBC}[model]
  10. self.key = self.add_16(key)
  11. if model == 'ECB':
  12. self.aes = AES.new(self.key, self.model) # 创建一个aes对象
  13. elif model == 'CBC':
  14. self.aes = AES.new(self.key, self.model, iv) # 创建一个aes对象
  15. # 这里的密钥长度必须是16、24或32,目前16位的就够用了
  16. def add_16(self, par):
  17. par = par.encode(self.encode_)
  18. while len(par) % 16 != 0:
  19. par += b'\x00'
  20. return par
  21. # 加密
  22. def aesencrypt(self, text):
  23. text = pad(text.encode('utf-8'), AES.block_size, style='pkcs7')
  24. self.encrypt_text = self.aes.encrypt(text)
  25. return base64.encodebytes(self.encrypt_text).decode().strip()
  26. # 解密
  27. def aesdecrypt(self, text):
  28. text = base64.decodebytes(text.encode(self.encode_))
  29. self.decrypt_text = self.aes.decrypt(text)
  30. return self.decrypt_text.decode(self.encode_).strip('\0').strip("\n")
  31. if __name__ == '__main__':
  32. pr = AesCrypt('ECB', '', 'utf-8', 'abcdefghijklmnop')
  33. pr1 = AesCrypt("ECB", "", "utf-8")
  34. en_text = pr.aesencrypt('123456')
  35. print('密文:', en_text)
  36. print('明文:', pr1.aesdecrypt(en_text))

注意

要保证vue和python加密后的密文一只,必须保证加密模式,偏移量,秘钥等全部一致

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/article/detail/50030
推荐阅读
相关标签
  

闽ICP备14008679号