python和js实现AES加解密
小白学习中......
AES算法
AES全称为高级加密标准,是Advanced Encryption Standard的首字母简写。详细了解,可以找专门的资料进行学习。
场景
开发一个web网站过程中,期望数据得以加密。
后台:django 前端:vue
使用
python安装Crypto, 参考:https://blog.csdn.net/zzddada/article/details/123042823
python示例:
# encoding=‘utf-8'
import base64
import hashlib
import re from Crypto.Cipher import AES def getSha256(text):
h = hashlib.sha256()
h.update(text.encode())
ret = h.hexdigest()
return ret class AES_Crypt(object):
def __init__(self, key, iv):
self.key = key.encode("utf-8")
self.iv = (iv[20:36]).encode()
self.mode = AES.MODE_CBC
# 加密函数,如果text不足16位就用空格补足为16位,
# 如果大于16当时不是16的倍数,那就补足为16的倍数。 def encrypt(self, text):
try:
text = text
cryptor = AES.new(self.key, self.mode, self.iv)
# 这里密钥key 长度必须为16(AES-128),
# 24(AES-192),或者32 (AES-256)Bytes 长度
# 目前AES-128 足够目前使用
length = 16
count = len(text.encode('utf-8'))
if count < length:
add = (length - count)
# \0 backspace
# 以\0补足js做空格切割,切不掉,换成ASCII字符
# text = text + ('\0' * add)
text = text + (chr(add) * add)
elif count > length:
add = (length - (count % length))
# text = text + ('\0' * add)
text = text + (chr(add) * add)
ciphertext = cryptor.encrypt(text.encode("utf-8"))
# 因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
# 所以这里统一把加密后的字符串转化为字符串
s = str(base64.b64encode(ciphertext), 'utf-8')
except Exception:
s = " "
return s # 解密后,去掉补足的空格用strip() 去掉 def decrypt(self, text):
try:
cryptor = AES.new(self.key, self.mode, self.iv)
text = base64.b64decode(text)
plain_text = cryptor.decrypt(text)
# return plain_text.rstrip('\0')
# print(plain_text)
# 去除混乱字符
reboj = re.compile('[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f\n\r\t]')
return reboj.sub('', plain_text.decode())
# return bytes.decode(plain_text).rstrip('\0')
except Exception:
return " " def setAES(key, iv, text):
ac = AES_Crypt(key, iv) # 初始化密钥
ret = ac.encrypt(text)
return ret def getAES(key, iv, text):
ac = AES_Crypt(key, iv) # 初始化密钥
ret = ac.decrypt(text)
return ret def setDataAes(key, text):
key = getSha256(key)[10:26]
iv = getSha256(key)
ret = setAES(key, iv, text)
return ret def getDataAes(key, text):
key = getSha256(key)[10:26]
iv = getSha256(key)
ret = getAES(key, iv, text)
return ret if __name__ == '__main__':
print(setDataAes("111", "月色真美"))
print(getDataAes("111", "nUQ4JdNYKbtv8FF9vlrqAw=="))
运行结果:

js示例:
import CryptoJS from "crypto-js";
import { sha256 } from 'js-sha256' function getSha256(text){
return sha256(text)
}; function encrypt_str(key, iv, str) {
var KEY = key;
var IV = iv.substr(20, 16);
var key = CryptoJS.enc.Utf8.parse(KEY); // 秘钥
var iv = CryptoJS.enc.Utf8.parse(IV); //向量iv
var encrypted = CryptoJS.AES.encrypt(str, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
});
return encrypted.toString();
};
function decrypt_str(key, iv, str){
var KEY = key;
var IV = iv.substr(20, 16);
var key = CryptoJS.enc.Utf8.parse(KEY); // 秘钥
var iv = CryptoJS.enc.Utf8.parse(IV); //向量iv
var decrypted = CryptoJS.AES.decrypt(str, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
});
return decrypted.toString(CryptoJS.enc.Utf8);
};
function setDataAes(key, text){
var key1 = getSha256(key).substr(10, 16)
var iv1 = getSha256(key1)
var ret1 = encrypt_str(key1, iv1, text)
return ret1
};
function getDataAes(key, text){
var key = getSha256(key).substr(10, 16)
var iv = getSha256(key)
var ret = decrypt_str(key, iv, text)
var ret_s = ret.replace(/^\s*|\s*$/g, '') return ret_s
}; export {setDataAes, getDataAes}
运行结果:

python和js实现AES加解密的更多相关文章
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
- cryptoJS AES 加解密简单使用
简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...
- 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)
近期刚做的一个项目.关于 Socket TCP 通信. 需求方提供了一个 ARM 机器,及数据採集器,须要我做一个服务端与数据採集器进行交互. 目的: 数据採集器:定时将读取到的数据发送到服务端. 服 ...
- [转帖]前端 crypto-js aes 加解密
前端 crypto-js aes 加解密 2018.04.13 11:37:21字数 891阅读 59767 https://www.jianshu.com/p/a47477e8126a 原来前端也有 ...
- RSA,AES加解密算法的实现
目录 Python实现RSA公钥加密算法 RSA公钥加密算法原理 RSA算法的Python实现 AES加解密算法实现 AES加解密算法原理 AES加解密算法Python实现 参考文献 Python实现 ...
- aes加解密前后端-后台
一.web.xml: <filter> <filter-name>fastLoginFilter</filter-name> <filter-class> ...
- DES,AeS加解密,MD5,SHA加密
1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...
- c# Aes加解密和对象序列化
aes加解密 public class AesCryptto { private string key = "hjyf57468jhmuist"; private string i ...
- Java、C#双语版配套AES加解密示例
这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...
- AES加解密算法Qt实现
[声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...
随机推荐
- 跨域获取iframe页面的url
一:跨域获取iframe页面的url 1.在使用iframe页面的js添加以下内容 <script> var host = window.location.href; var histor ...
- HTML5第五章作业
5.1.3 html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" ...
- ybtoj 12F
求值的话改为求解前缀和的值,通过两个前缀和相减即可得到每个值. 每次询问相当于给一个方程. 一共有 $n$ 个未知数,因此需要 $n$ 个方程,同时每个数都必须至少在方程中出现一次. 最小生成树求解即 ...
- drf视图类
1 2个视图基类 # django 内置的View# drf 的APIView ,继承自View# GenericAPIView -两个重要的类属性: queryset = Book.objec ...
- SQL相关知识点
一.基本概念 数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件). 数据表(table) - 某种特定类型数据的结构化清单. 模式(schema) - 关于 ...
- 中兴radius属性列表new.xls
标准属性 自定义属性
- centos安装k8s注意点
安装方法,参考 https://blog.csdn.net/frankgy01/article/details/127936367 https://www.cnblogs.com/yangzp/p/1 ...
- Leecode 1.两数之和(Java 哈希表)
想法: 1.哈希表hashmap 第一种方法:将数组中元素及其下标right都加入hashmap中,对于每个元素n下标left,在map中查找是否有target-n的元素,若有,则返回其下标right ...
- java锁之初相见
废话不多说,先上锁的分类图 1.乐观锁&悲观锁 悲观锁 悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,把别的线程阻塞住,最终确保数据不会被别的线程修改. ...
- [转]sublime text 4注册
1.打开浏览器进入网站https://hexed.it2.打开sublime text4安装目录选择文件sublime_text.exe3.搜索80 78 05 00 0f 94 c1更改为c6 40 ...