前后端数据安全:使用JS和Python进行加密与解密
最编程
2024-02-03 22:08:57
...
JS加密模块【js-md5(AES) 、 crypto (AES)、 crypto-js()、jsencrypt(非对称加密、RSA)】
一、安装
npm install js-md5
npm install crypto
npm install crypto-js
npm install jsencrypt
二、使用
1、js-md5 js-md5准确来说不算是加密,应该说是将密文序列化了,可以通过下列的网站将md5加密后的字符直接解析出来,因此安全性很低 www.cmd5.com/
const md5 = require('js-md5');
function md5Encryption(pwd){
return md5(pwd)
}
console.log(md5Encryption('abc123')); //e99a18c428cb38d5f260853678922e03
2、crypto 加入随机密钥后,安全性上比之MD5提高了很多,通过上面的解密网站已经解密不出来了
'use strict'
const crypto = require('crypto');
// 加密
function encryption(message){
// 初始化数据
const key = crypto.randomBytes(32) //32位随机共享密钥
const iv = crypto.randomBytes(16); //初始向量,16字节
const algorithm = 'aes-256-gcm'; //加密算法和操作模式
const text = String(message); //将需要加密的数据转成字符串
//初始化加密算法
const cipher = crypto.createCipheriv(algorithm,key,iv); //传入创建密钥所需参数
let encrypted = cipher.update(text,'utf8','hex'); // 初始化加密密文
encrypted += cipher.final('hex') //加密密文
const tag = cipher.getAuthTag() //生成标签,用于验证密文的来源
return [encrypted,tag,key,iv,algorithm] //返回加密密文和密文来源信息
}
// 解密
function decrypt(cipherTextList){
const [encrypted,tag,key,iv,algorithm] = cipherTextList //导入解密内容和解密需要用到的密钥
const decipher = crypto.createDecipheriv(algorithm,key,iv)
decipher.setAuthTag(tag) //传入验证标签,验证密文来源,当验证标签不一致时代码报错
let decrypted = decipher.update(encrypted,'hex','utf8');
decrypted += decipher.final('utf8')
return decrypted
}
let ciphered = encryption(1234556344) //加密后返回密文数组
let cipher = decrypt(ciphered) //解密后返回解密密文
console.log(ciphered[0]) // 628e1b71ae1d27ef5e01
console.log(cipher); // 1234556344
3、crypto-js 通过自定义的密钥进行加解密,可以更灵活的加解密密文,但是因为密文的key在可以通过前端看到,所以加密的信息虽然通过解密网站无法解密,但是可以通过在前端得到的公共key进行解密
// crypto-js加密
const CryptoJS = require('crypto-js');
function cryptoEncryption(aseKey,message){ //aseKey为密钥(必须为:8/16/32位),message为要加密的密文
var encrypt = CryptoJS.AES.encrypt(message,CryptoJS.enc.Utf8.parse(aseKey),{
mode:CryptoJS.mode.ECB,
padding:CryptoJS.pad.Pkcs7
}).toString();
return encrypt
}
// crypto-js解密
function cryptoDecrypt(aseKey,message){
var decrypt = CryptoJS.AES.decrypt(message, CryptoJS.enc.Utf8.parse(aseKey), {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
return decrypt
}
var aseKey = "12345678" //密钥一致才能进行解密
var encrpytText = "abc12345";
var decryptText = 'KLqoT18E3l+OoDFLwS8DsA=='
console.log(cryptoEncryption(aseKey,encrpytText)); //调用加密方法
console.log(cryptoDecrypt(aseKey,decryptText));//调用解密方法
4、非对称(RSA)加密:jsencrypt 非对称加密密钥生成网站:web.chacuo.net/netrsakeypa… 关于该加密模块,出现在自己做的一个后台管理系统项目中,前端是vue,后端是Java。应用的场景是需要前端通过公钥对需要加密的密文进行加密,后端通过私钥对前端加密的密文进行解密。这样能比之前三个能极大的提高密文安全性。相关的使用方式可以参照下面 关于前端的其他加密解密好文中的第二个。 这里把关于前端方面简化后的代码贴在下方,可供参考,后端方面的参考下方链接的第二个博文
let encryptor = new JSEncrypt() // 新建JSEncrypt对象
let publicKey = `公钥` //设置公钥,可以从上面的非对称加密密钥生成网站中得到
encryptor.setPublicKey(publicKey) // 将得到的公钥通过setPbulicKey方法设置到JSEncrypt对象中
let rsaPassWord = encryptor.encrypt('加密密文') // 对需要加密的数据进行加密,rspPassWord就是加密密文
python RSA加密解密
文件中的pub.key和pri.key都是在网站web.chacuo.net/netrsakeypa… 中生成的后保存在本地的,自己保存一下
安装第三方库
pip uninstall crypto pycryptodome #安装的如果导入不成功卸载了
pip install pycryptodome #再次安装
代码
import base64
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pksc1_v1_5
from Crypto.PublicKey import RSA
import os
dir_path = os.path.dirname(__file__)
def encrpt(msg):
with open(dir_path+"\\pub.key", 'r', encoding='utf-8') as f:
pub = f.read() # 加密公钥
public_key = '-----BEGIN PUBLIC KEY-----\n' + pub + '\n-----END PUBLIC KEY-----'
rsakey = RSA.importKey(public_key)
cipher = Cipher_pksc1_v1_5.new(rsakey)
cipher_text = base64.b64encode(cipher.encrypt(msg.encode()))
return cipher_text.decode()
def decrypt(encrypt_msg):
with open(dir_path+"\\pri.key", 'r', encoding='utf-8') as f:
pri = f.read() # 加密私钥
private_key = '-----BEGIN PRIVATE KEY-----\n' + \
pri + '\n-----END PRIVATE KEY-----'
decodeStr = base64.b64decode(encrypt_msg) # cipher_text是上面rsa加密的内容
rsakey = RSA.importKey(private_key)
prikey = Cipher_pksc1_v1_5.new(rsakey)
encry_text = prikey.decrypt(decodeStr, b'rsa')
return encry_text.decode('utf8')
#前端经过加密的密文
ciphertext = "dOESS/7V8a1+RB5xweXnJCGr0SLQqf5H6tNQW/b78HDn9N6kEN2fzeEO4t3AqLkAlOzLXGtYKdONN8Hxs6lV7hPa2bHRJz5X4kzOqj/HsDqy9zd/1ZSoMxl7pi9B0dzhjThFqgydLSPvgAMyVQhvLjo/jOvtUJ6nPrd3pwmLCyJP9fP4vhC7KmJEJMzaOSbgQLFKksiR3Bv0O+mubcgTTSFKHMxgwcAQ+cPGtMNtnUMkCVruMZWUwQ23/0dm3KOWAALlumA59p+JMZNG4zThiXrIIkyGMZ62wmxfINEeTWBvI/7vq0kCOEPMf2RWpNnR+kxnZxKlp1ih7AIOvqAaLg=="
# ciphertext = encrpt('admin*cc123') #测试密钥
# print('密文:', ciphertext)
plaintext = decrypt(ciphertext)
print('明文:', plaintext)
关于前端的其他加密解密好文:
1、前端使用CryptoJS的几种加密方式 www.jianshu.com/p/7b5eb3351… 2、非对称加密(vue项目) blog.****.net/weixin_4242…
推荐阅读
-
iCloud 切换区域,中国区保留 appStore(更新)--自 2018 年 2 月 28 日起,中国区 iCloud 由云上贵州管理 苹果公司发布的公告 https://support.apple.com/zh-cn/HT208352 关键词 关键部分 受影响的 iCloud 账户:国家或地区设置为 "中国 "的 Apple ID。 iCloud 包含的服务照片、邮件、通讯录、日历、提醒事项、备忘、书签、钱包、钥匙串、云备份、云驱动器、应用程序数据 新条款和条件: 同意仅出于本协议允许的目的并在中国法律允许的范围内使用服务。 云桂洲在提供服务时应使用合理的技能并尽职尽责,但在适用法律允许的最大范围内,我们不保证或担保您通过本服务存储或访问的任何内容不会意外损坏、崩溃、丢失或根据本协议的条款被删除,如果发生此类损坏、崩溃、丢失或删除,我们不承担任何责任。您应自行负责维护您的信息和数据的适当备份。 Apple 和云上贵州有权访问您存储在服务中的所有数据,包括有权根据适用法律相互之间共享、交换和披露所有用户数据(包括内容)。 本协议的解释、效力和履行应适用*法律。对于因本协议引起的或与本协议有关的任何争议,云桂洲和您同意提交中国国际经济贸易仲裁委员会(CIETAC)根据提交仲裁时有效的法律在北京进行具有约束力的仲裁。 由云桂洲管理,用户选择: 停用; ID 到地区; 受 iCloud(由云桂洲运营)条款和条件约束 首先,我想说说我对数据安全的看法。 当我在朋友圈发布通知时,有些朋友回复说国外的操作并没有多安全,或者国外的安全只是相对于国外而言的等等。首先,我非常感谢这些朋友,这让我反思什么是数据安全。以下观点均属个人观点: 国外的月亮一定比国内圆? 这是一个根深蒂固的问题,只要有人说国外的东西比国内好,就会有人嘲笑崇洋媚外。我觉得我们在某些方面应该向国外学习,比如搜索引擎和版权问题。打开百度搜索 "数据安全",第一行肯定是广告。打开谷歌搜索 "数据安全",第一条就是 "数据安全_百度百科" .....各种版权问题大家都明白,支持正版,但不仅客户一心想找免费破解,就连作者也往往没有保护自己劳动成果或产品的想法。但从另一个层面来说,国内的发展和安全,甩国外几条街。没有说哪里好,哪里不好,辩证地去学习更好。 国外也有别有用心的数据泄露,谈何安全? 从加密解密的角度看,自古以来就没有绝对安全的加密,只有相对安全的做法。苹果的棱镜门、微软的 cpu 漏洞,各种参差不齐的被破解案例 ....是的,这的确是一个很好的论据,但凡事都不能只看一面,当年苹果面对FBI破解手机的要求,几经论证,苹果还是拒绝破解。这点拿到国内,只要上面的文件传达下去,还有企业敢说不吗?还敢说不吗? 关于这次iCloud数据迁移个人看法? 把数据迁移到贵州的云端,相当于把手机的所有数据都存储在贵州的云端服务器上。也许访问数据的速度会快很多,但我会把我的iCloud区放到美国,因为我不想数据存在云上贵州后经常接到莫名其妙的电话或短信,更不想因为乱用国外服务器而被请去喝茶。iCloud一个ID,即从中国账号转到美国区,主要用于数据存在美国服务器上。appStore一个ID,除了注册一个中国ID外,专门用来下载应用用,因为国外ID不支持酷狗和网易云等应用。麻烦的是,用了新的 appStore ID 后,当前的应用还得重新下载安装,因为旧的应用 ID 与新的应用 ID 不兼容,安装不了。最后,iCloud迁移后,国内用户使用美国服务器,估计要 "扶墙 "了。 专业步骤: 首先,进行appleID设置,这是前提条件,否则无法选择转移区域! 取消 appleID 的双重认证 取消家庭共享选项 二、窗口下载并安装 icloud 3.0 版
-
使用hashlib库进行数据加密与解密:确保信息安全篇 - 第1部分
-
玩转Python:使用hashlib库进行数据加密与解密操作
-
前后端数据安全:使用JS和Python进行加密与解密