小白学习中......

  • 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. spring为什么默认单例模式

    单例bean的优势 由于不会每次都新创建新对象所以有一下几个性能上的优势. 1.减少了新生成实例的消耗 新生成实例消耗包括两方面,第一,spring会通过反射或者cglib来生成bean实例这都是耗性 ...

  2. pdb 和 gdb 联调 python + cpython源码

    起因: 下面这段奇怪的 python 代码,一个奇怪的 bug,简单来说就是在一个模块内定义了一个 class Test, 然后创建了一个 Test 的对象 ,然后在一个函数内通过 from impo ...

  3. PHP如何在两个大文件中找出相同的记录?

    1.引言 给定a,b两个文件, 分别有x,y行数据, 其中(x, y均大于10亿), 机器内存限制100M,该如何找出其中相同的记录? 2.思路 处理该问题的困难主要是无法将这海量数据一次性读进内存中 ...

  4. 【Unity】检测目标是否在视线范围内(附视线范围扇形画法)

    检测目标是否在视线范围内(附视线范围扇形画法) using UnityEngine; public class Test_CanSeeTarget : MonoBehaviour { public G ...

  5. 第一课 Hello World程序

    接触一门编程语言都是从HelloWorld开始的.我们以Idea为开发工具,写一个JAVA版的HelloWorld. 1,启动idea,点击菜单 File->New->Project 新建 ...

  6. kg打怪升级

    1.kaggle notebook容易断[continue部署] 2.换预训练模型[提交试试] 3.换fold次数

  7. 转载C#文件下载的实现

    一.//TransmitFile实现下载     protected void Button1_Click(object sender, EventArgs e)    {        /*     ...

  8. finereport连接sql server

    1.添加jdbc 2.选择sql server 3.jdbc:sqlserver://localhost:1433(localhost=其他IP地址)

  9. Liunx下tomcat安装配置

    1.在LIUNX下下载tomcat.wget apache-tomcat-7.0.41.tar.gz 2.在安装目录下解压. tar -zxvf apache-tomcat-7.0.41.tar.gz ...

  10. beta冲刺:总结随笔

    这个作业属于哪个课程 <班级的链接> 这个作业要求在哪里 <作业要求的链接> 这个作业的目标 beta冲刺总结 作业正文 .... 其他参考文献 ... 一.预期计划 | 6. ...