小白学习中......

  • 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. 【项目记录】1:一些没有一次安装成功地Python模块

    记录一下,下次查找方便. 1.PIL包 PIL名称已经换成了Pillow 所以使用: pip3 install pil 会报错. 正确方法是: pip3 install pillow 2.win32c ...

  2. FII-PRA006/010开发板硬件实验一

    FII-PRA006/010开发板硬件实验一 以一位全加器为例介绍如何利用开发板进行板载实验.一位全加器的Verilog代码如下: 1 2 3 4 5 6 7 8 9 10 module fadd1 ...

  3. 简单了解promise

    promise是什么: JavaScript中存在很多异步操作, Promise将异步操作队列化,按照期望的顺序执行,返回 符合预期的结果.可以通过链式调用多个 Promise达到我们的目的. Pro ...

  4. Crypto入门 (十一)easychallenge

    前言: 这题跟python有关,可见看懂python代码还是很有必要得,需要有一些python基础才好 easychallenge: 题目: 下载后来发现是一个.pyc为后缀得文件,查找资料可知,该文 ...

  5. 【node打包缺包】Error: Can't walk dependency graph: Cannot find module 'jquery' from

    问题: 在使用node打包时,终端报错提示Error: Can't walk dependency graph: Cannot find module 'jquery' from/.../ 这个提示缺 ...

  6. java学习笔记(五)运算符

    ++ --   自增自减 a++ 执行完这行代码后,先给b赋值,再自增 ++a 执行完这行代码前,先自增,再给b赋值 Math类

  7. PCRaster安装

    改了很久才import成功.期间查了不少东西,虽然大部分没用上,但还是记录一下. PCRaster的安装和个人的最终解决方法 Software for environmental modelling ...

  8. 基于R的Bilibili视频数据建模及分析——预处理篇

    基于R的Bilibili视频数据建模及分析--预处理篇 文章目录 基于R的Bilibili视频数据建模及分析--预处理篇 0.写在前面 1.项目介绍 1.1 项目背景 1.2 数据来源 1.3 数据集 ...

  9. UAC的详细讲解(转载)

    win32中也有对UAC的操作方法 网址:https://blog.csdn.net/zuishikonghuan/article/details/46965159?locationNum=7& ...

  10. 自定义DOM事件函数封装

    非原生DOM触发,个性化定制的自定义事件. currentTarget(DOM对象):要触发事件的元素节点. type(字符串):触发的事件类型,例如"keydown". bubb ...