小白学习中......

  • 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加解密的更多相关文章

  1. .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 ...

  2. cryptoJS AES 加解密简单使用

    简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...

  3. 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)

    近期刚做的一个项目.关于 Socket TCP 通信. 需求方提供了一个 ARM 机器,及数据採集器,须要我做一个服务端与数据採集器进行交互. 目的: 数据採集器:定时将读取到的数据发送到服务端. 服 ...

  4. [转帖]前端 crypto-js aes 加解密

    前端 crypto-js aes 加解密 2018.04.13 11:37:21字数 891阅读 59767 https://www.jianshu.com/p/a47477e8126a 原来前端也有 ...

  5. RSA,AES加解密算法的实现

    目录 Python实现RSA公钥加密算法 RSA公钥加密算法原理 RSA算法的Python实现 AES加解密算法实现 AES加解密算法原理 AES加解密算法Python实现 参考文献 Python实现 ...

  6. aes加解密前后端-后台

    一.web.xml: <filter> <filter-name>fastLoginFilter</filter-name> <filter-class> ...

  7. DES,AeS加解密,MD5,SHA加密

    1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...

  8. c# Aes加解密和对象序列化

    aes加解密 public class AesCryptto { private string key = "hjyf57468jhmuist"; private string i ...

  9. Java、C#双语版配套AES加解密示例

      这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...

  10. AES加解密算法Qt实现

    [声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...

随机推荐

  1. gulp技术:自动化构建工具

    作用:压缩css.js.img,合并文件,改名字,编译sass,拷贝 使用步骤: 1.安装node环境,下一步,下一步,安装C盘: 2.在你的根目录下,在地址栏输入cmd回车: 3.检测node和np ...

  2. k8s介绍和学习思路

    1. Kubernetes介绍 Kubernetes是一个完备的分布式系统支撑平台.具备完备的集群管理能力,包括多层次的安全防护和准入机制.多租户应用支撑能力.透明的服务注册和服务发现机制.内建的智能 ...

  3. 查看app包名

    操作步骤: 1.cmd中输入命令:adb shell am monitor 2.启动需要获取包名的应用

  4. 并发QPS公式估算

    一.经典公式1: 一般来说,利用以下经验公式进行估算系统的平均并发用户数和峰值数据 1)平均并发用户数为 C = nL/T 2)并发用户数峰值 C' = C + 3*根号C C是平均并发用户数,n是l ...

  5. 如何让charles无论怎么请求都返回一个结果

    1. map Local         将匹配的url映射到本地文件.这个需要首先将url右键,save Response,将原有报文保存到本地,然后映射到该文件,修改该文件即可,直接自己写费事2. ...

  6. Realtek 平台一些乱七八糟的编译环境设置

    1. 129x 系列之后的就推荐用ubuntu 16.04了 省去一些GCC ,tar,quilt 等问题 Android 平台: sudo apt-get install u-boot-tools ...

  7. commons-lang3

    字符串的处理类(StringUtils) //判断是否为空(注:isBlank与isEmpty 区别) StringUtils.isBlank(null);StringUtils.isBlank(&q ...

  8. MyBatis-Plus 代码生成器超详细讲解

    参见:    https://www.jianshu.com/p/9d8ab1bb84bb

  9. 编译GO报错:cgo: C compiler

    cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH ...

  10. 记录下老dropbox的使用

    32-bit: wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf - 64-bit: wget ...