aes 256 ecb 加解密 pkcs7补全 python JS
python aes 256 ecb 加解密
- 功能
- 实现
- Python ECB 256
- JS版本 ECB 算法
- JS版本 CBC 算法Pkcs7填充
- SQL AES
- 在线验证网站
- notice
功能
1、DB查询手机号,若未加密,批量更新回填
2、查询加密的手机号,解密显示。
实现
Python ECB 256
import pymysql
from Crypto.Util.Padding import pad
from Crypto.Cipher import AES
import base64key = "0123456789abcdef0123456789abcdef"def AES_Encrypt(key, aes_str):aes = AES.new(key.encode('utf-8'), AES.MODE_ECB)pad_pkcs7 = pad(aes_str.encode('utf-8'), AES.block_size, style='pkcs7') # 选择pkcs7补全encrypt_aes = aes.encrypt(pad_pkcs7)encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') encrypted_text_str = encrypted_text.replace("\n", "")return encrypted_text_strdef AES_Decrypt(key, text):aes = AES.new(str.encode(key), AES.MODE_ECB)base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8'))decrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8').replace('\0', '')return decrypted_textdb = pymysql.connect(user='root', password='123456', database='demos', host='127.0.0.1', port=3306, charset='utf8mb4')
cursor = db.cursor()cursor.execute("select userId, phone from users")
data = cursor.fetchall()val_list = []for d in data:if len(d[1]) <= 14:val_list.append([AES_Encrypt(key, d[1]), d[0]])else:print(AES_Decrypt(key ,d[1]))continueprint(val_list)with db.cursor() as cursor:try:sql = "UPDATE users SET phone=(%s) WHERE userId=(%s)"cursor.executemany(sql, val_list)db.commit()except:db.rollback()
db.close()if __name__ == '__main__':print("done")
JS版本 ECB 算法
var mysql = require('mysql2');
const CryptoJS = require('crypto-js');const crypto = require('crypto');
const secretKey = '0123456789abcdef0123456789abcdef';const iv = '0123456789abcdef';function aes256Decrypt(key, data, crypto) {if (key.length !== 32) throw onerrorconst cipher = crypto.createDecipheriv('aes-256-ecb', key, '');let c = cipher.update(data, 'base64', 'utf8');c += cipher.final('utf8');return c;
}var connection = mysql.createConnection({host : '127.0.0.1',user : 'root',password : '123456',port: '3306',database: 'demos'
});connection.connect();var phones_aes = [];
var m = new Map();
connection.query('select userId, phone from users',function (err, result) {if(err){console.log('[SELECT ERROR] - ',err.message);return;}for (const re of result) {if (re.phone.length > 14) {re.phone = aes256Decrypt(secretKey, re.phone, crypto);}console.log(re);}console.log('------------------------------------------------------------\n\n');
});connection.end()
JS版本 CBC 算法Pkcs7填充
var mysql = require('mysql2');
const CryptoJS = require('crypto-js');const crypto = require('crypto');
const secretKey = '0123456789abcdef0123456789abcdef';const iv = '0123456789abcdef';function aesEncrypt(content) {const key = CryptoJS.enc.Utf8.parse(secretKey);let srcs = CryptoJS.enc.Utf8.parse(content);const ivs = CryptoJS.enc.Utf8.parse(iv);let encrypted = CryptoJS.AES.encrypt(srcs, key, {iv: ivs,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7,});return encrypted.toString();
}function aesDecrypt(content) {let key = CryptoJS.enc.Utf8.parse(secretKey);const ivs = CryptoJS.enc.Utf8.parse(iv);let decrypt = CryptoJS.AES.decrypt(content, key, {iv: ivs,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7,});return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
SQL AES
-- 加密:aes加密之后base64
select to_base64(AES_ENCRYPT(phone, '8G5M4Ff9hel8fUA9'))
-- 解密:base64反编译之后aes解密
select AES_DECRYPT(from_base64('giSZmBtx0y1OdggamClBOQ=='),'8G5M4Ff9hel8fUA9')-- AES加密
SELECT AES_ENCRYPT('1234567890123456','abcdefgh');-- AES解密
SELECT AES_DECRYPT(AES_ENCRYPT('1234567890123456','abcdefgh') ,'abcdefgh') ;-- AES加密后进行转成16进制
SELECT HEX(AES_ENCRYPT('1234567890123456','abcdefgh'));-- AES加密后进行转成16进制,再转二进制进行解密
SELECT AES_DECRYPT(UNHEX(HEX(AES_ENCRYPT('1234567890123456','abcdefgh'))),'abcdefgh');-- 设置参数
mysql> SET block_encryption_mode = 'aes-256-cbc';
mysql> SET @key_str = SHA2('My secret passphrase',512);
mysql> SET @init_vector = RANDOM_BYTES(16);
mysql> SET @crypt_str = AES_ENCRYPT('text',@key_str,@init_vector);
mysql> SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);
+-----------------------------------------------+
| AES_DECRYPT(@crypt_str,@key_str,@init_vector) |
+-----------------------------------------------+
| text |
+-----------------------------------------------+
在线验证网站
https://www.mklab.cn/utils/aes
https://www.jpwz.vip/tool/hextobase64.html
notice
1、不同语言,不同库AES加解密有差异, 注意不要踩坑
2、MySQL 中只有基于unix系统才可以调AES_DECRYPT,AES_DECRYPT,不同版本需要注意
aes 256 ecb 加解密 pkcs7补全 python JS相关推荐
- aes加密算法python语言实现_如何用Python实现AES CCM的加解密
1.简介 AES CCM被广泛应用于现代通讯中,在学习过程中需要验证数据的加解密的结果,那么有个方便修改的Python脚本工具就是一个迫切的需求. 2. 实施 我们下面介绍如何实现AES CCM的Py ...
- 蚂蚁集团研究员王益:Go+ 可有效补全 Python 的不足
王益,蚂蚁集团研究员,开源项目SQLFlow 和 ElasticDL 的负责人.他从10岁开始写代码.曾经用自己焊接的电路板扩展"中华学习机"来把自家的老式"威力牌&qu ...
- 蚂蚁王益:Go+ 可有效补全 Python 的不足
简介:Python 的语法很灵活,融合了很多其他语言中令人觉得方便的特点.然而 Python 的优势同时也隐含了其劣势.蚂蚁研究员王益在工业系统中对 Python 的亲身体会,更加深刻地了解到了 Py ...
- python实现AES对文件加解密(这里使用ECB密码本模式)
文章目录 1.加密 2.解密 pip install pycryptodome 请注意加解密成功的前提条件 加解密密匙key值相同 加解密密匙长度相同 加解密补长度的逻辑相同 加解密的模式相同 1.加 ...
- CTF常见编码及加解密(超全)
文章目录 前言 常见CTF编码及加解密 补充 ASCII编码 base家族编码 MD5.SHA1.HMAC.NTLM等类似加密型 1.MD5 2.SHA1 3.HMAC 4.NTLM 5.类似加密穷举 ...
- RSA+AES数字信封加解密设计
登录认证.鉴权这些都做好了过后.就开始我们的加密设计了.这里采用了简化数字信封进行加密.首先客户端(浏览器)先请求一份RSA非对称密钥.如果我们采用了openresty或者有能力在nginx开发C模块 ...
- Go Nodejs Java Aes 128 ECB加密解密结果保持一致
在多语言的生产环境下,常常是由一种语言进行加密而由另一种语言来进行解密,因此有必要保持各种语言之间加密解密算法的一致性.下面列出了Go,Nodejs,Java 的 Aes-128-Ecb的加密解密算法 ...
- JavaIO流加解密,AES对字符串加解密
加解密文件? 哈哈哈哈,当然是为了安全,自己的东西不像让别人看见. 1,学了JavaIO流的字节流的读取写入,便可实现. 加密原理: 把文件读取,然后,按某个特定的规则改变其字节写入一个新文件. 解密 ...
- Java实现Base64、DES、AES、RSA加解密以及加密方式之间的区别
Base64 加密, 这个其实不可以算作加密方法,它可以看作是一种编码方式,它的用途只是二进制数字和字符串进行相互转化. Base64是网络上最常见的用于传输 8Bit字节码的编码方式之一,是一种基于 ...
最新文章
- 用Unison+inotify实现数据的双向实时同步
- 一次家庭作业意外搞定40年前的数学猜想,牛津小哥:我只研究了几个礼拜
- redis实现分布式锁——核心 setx+pipe watch监控key变化-事务
- 华硕无线网卡测试软件,家用无线网卡王者 华硕PCE-AC88 双频3100网卡测试
- npm 与 package.json 快速入门
- 虚拟机的性能监控与故障处理——jps,jstat,jinfo,jmap,jhat,jstack
- java stringbuffer倒置_Java程序设计05——String和StringBuffer
- struts2,jsp,freemarker编程小技巧
- CityEngine 2012与ArcGIS 10.2破解心得
- mvc 404错误 php,java - springmvc 请求无法到达controller,出现404错误
- iOS UI 18 数据库
- map std 浮点数索引_C std :: map持有任何类型的值
- docker命令每次需要sudo操作解决方案
- OpenCV-Python教程(7、Laplacian算子)
- windows下7z文件解压
- mysql directx repair_[MySQL]快速解决is marked as crashed and should be repaired故障
- Termux字体大小调整
- 用简道云做一个可以账号密码登陆和找回密码并查询修改已填信息的公开表单
- 苹果手机清灰_手机听筒喇叭声音越来越小?来试试这三个小技巧
- win10 DOS命令操作
热门文章
- python 模拟浏览器操作_python 使用 mechanize 模拟浏览器访问网页
- 社区/社群运营——《互联网运营的知识体系与整体逻辑》笔记(六)
- SAP采购订单创建预付款并删除
- 如何应对软件需求不明确、需求频繁更改和需求的无底洞
- MIGO创新挖矿,玩游戏也可以有收益
- 亚马逊店铺服装类目如何审核?亚马逊的服装类目很难出单怎么办?
- Java jpg转png png转jpg
- 合并分支实战(A合并到 B,然后 B再合并到A减少冲突)
- Ubuntu开启SMB服务,Windows无法对硬盘读写
- 数影周报:2亿Twitter用户资料仅售2美元,微盟集团将筹约15.9亿港元