js aes加密 md5摘要 base64编码 ras加密

2024-04-21 19:52

本文主要是介绍js aes加密 md5摘要 base64编码 ras加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

crypto-js

  • npm install crypto-js
  • 主要用来处理: md5, AES, Base64

md5 摘要

const CryptoJS = require('crypto-js');function md5_test() {// 字符串入参console.log(CryptoJS.MD5('qwwqww').toString());// WordArray 入参const wordArray = CryptoJS.enc.Utf8.parse('qwwqww');CryptoJS.MD5(wordArray).toString();// wordArray 转换回 utf8 字符console.log(CryptoJS.enc.Utf8.stringify(wordArray));// 大文件 ,md5.update()const md5_hasher = CryptoJS.algo.MD5.create();md5_hasher.update('qww');md5_hasher.update('qww');const hash = md5_hasher.finalize();console.log(hash.toString());// 清除除之前的 update,调用 md5_hasher.reset()// md5_hasher.reset();// 输出:// 261c63f27f816ed12125f275350d512e// qwwqww// 261c63f27f816ed12125f275350d512e
}md5_test();

Base64 编码

(function base64_test() {// 3个字节转换为4个字节, 入参要为 wordArray, 就像后端入参为 ByteArray, 而不是字符串console.log(CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse('qww')));let md5_wordArr = CryptoJS.MD5('qwwqww');console.log(md5_wordArr.toString())// md5 输出的字符串采用16进制表示, 两个字符为一个实际的字节// 也就是6个字符代表3个实际的字节,是base 64后 会缩短为4个;也就是总长度会变为原来的 2/3const base64 = CryptoJS.enc.Base64.stringify(md5_wordArr);console.log(base64);
}())
// 输出:
// cXd3
// 261c63f27f816ed12125f275350d512e
// Jhxj8n+BbtEhJfJ1NQ1RLg==

AES

  • 明文、秘钥和偏移向量一般先用诸如 CryptoJS.enc.Utf8.parse() 转成 WordArray 对象再传入,这样做得到结果与不转换直接传入是不一样的。
  • 在加密时如果没有将明文进行 parse 而是直接传入的,那么在解密时,传入 toString() 的解析方式就是写默认的 CryptoJS.enc.Utf8
const CryptoJS = require('crypto-js');function md5_test() {// 字符串入参console.log(CryptoJS.MD5('qwwqww').toString());// WordArray 入参const wordArray = CryptoJS.enc.Utf8.parse('qwwqww');CryptoJS.MD5(wordArray).toString();// wordArray 转换回 utf8 字符console.log(CryptoJS.enc.Utf8.stringify(wordArray));// 大文件 ,md5.update()const md5_hasher = CryptoJS.algo.MD5.create();md5_hasher.update('qww');md5_hasher.update('qww');const hash = md5_hasher.finalize();console.log(hash.toString());// 清除除之前的 update,调用 md5_hasher.reset()// md5_hasher.reset();
}function aes_test_wordArray() {// =============================使用 wordArray============================// 加密const txt = 'qwwqww';// 注意 key, iv 如果不是 128、192 或 256 bit, 可以加密出密文来,但无法解密const key = '0123456789123456';const iv_str = '0123456789123456';const message = CryptoJS.enc.Utf8.parse(txt);const secretPassphrase = CryptoJS.enc.Utf8.parse(key);const iv = CryptoJS.enc.Utf8.parse(iv_str);const encrypted = CryptoJS.AES.encrypt(message, secretPassphrase, {mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7,iv}).toString();console.log(`==>>: encrypted= ${encrypted}`);// 解密const decrypted = CryptoJS.AES.decrypt(encrypted,secretPassphrase,{mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7,iv: iv});console.log(`decrypted=[${decrypted}]`);console.log(`decrypted.toString()=[${decrypted.toString()}]`);console.log(`decrypted.toString(CryptoJS.enc.Utf8)=[${decrypted.toString(CryptoJS.enc.Utf8)}]`);console.log(decrypted.toString(CryptoJS.enc.Utf8));// 输出:// ==>>: encrypted= 7rPjCUFm6h6LkY5TkjwmGQ==// decrypted=[717777717777]// decrypted.toString()=[717777717777]// decrypted.toString(CryptoJS.enc.Utf8)=[qwwqww]// qwwqww}function aes_test_str() {// =============================使用 字符串============================// 加密const txt = 'qwwqww';// 注意 key, iv 如果不是 128、192 或 256 bit, 可以加密出密文来,但无法解密const key = '0123456789123456';const iv_str = '0123456789123456';// const message = CryptoJS.enc.Utf8.parse(txt);// const secretPassphrase = CryptoJS.enc.Utf8.parse(key);// const iv = CryptoJS.enc.Utf8.parse(iv_str);const encrypted_str = CryptoJS.AES.encrypt(txt, key, {mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7,iv_str}).toString();console.log(`==>>: encrypted= ${encrypted_str}`);// 解密const decrypted = CryptoJS.AES.decrypt( encrypted_str, key,{mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7,iv: iv_str});console.log(`decrypted=[${decrypted}]`);console.log(`decrypted.toString()=[${decrypted.toString()}]`);console.log(`decrypted.toString(CryptoJS.enc.Utf8)=[${decrypted.toString(CryptoJS.enc.Utf8)}]`);console.log(decrypted.toString(CryptoJS.enc.Utf8));// 输出:// ==>>: encrypted= U2FsdGVkX199Zx4YIUHjkJfrKrB3TUA/E+Aqywe6GoU=// decrypted=[717777717777]// decrypted.toString()=[717777717777]// decrypted.toString(CryptoJS.enc.Utf8)=[qwwqww]// qwwqww
}aes_test_wordArray();
aes_test_str();

jsencrypt

  • npm install jsencrypt
  • 生成密钥对
openssl genrsa -out rsa_1024_priv.pem 1024
cat rsa_1024_priv.pem
---
$ cat rsa_1024_priv.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDbBEOrnpqVKvi16DGMAw2dRDUS+T05+4XY7J7DxAv2/qj4qAgk
PoUyDl9olkS2iHxmr2rRqLDNgFd2YkHnH//kWRN38opXJBzPU1friwSSP/7oW+kz
2ZpeCFy1TdJi6KYI6awZ2NTU24U8C2snzbfmjniw5dwX53I5vfaU6CBYfQIDAQAB
AoGBAM20uaJNez8zdxnTlgW9MGJPl9HUSo9VECfoRk30qpA4K5gwqkTwe8XB/haL
XMpccws3Iwr8d+Lr8jn8m41rXrjrP+irEnxzTYVTvjSaoNQxfICLGuD/mxali+e+
N1Y90NKUjOn3Xng+rDEp/mi4/cydoCe9FbFF89yIr4i/C4UBAkEA91caCUsrWa+D
M/vtv/rtu3edwKVUDMA5dGNB6SJZV+dJtENAztxcaO5Ssw56Wj64nWAkc5r7KqwH
XwHtA/5hYQJBAOKvTL0oNzQqCUQrAX25oz5luoRksBp1L/7wuExcktsaSsTalams
JaWAZUf1/Xaj6yBhRC79Zy8fvKdauiWCoJ0CQQDTsMXE7IQWx4P4ywcqR76Os4rd
5eJw41iJR6aSvWZQONE5KlJeefXRjSBUxfBsKsBhWXb5RszvMbtBUmmkAGUhAkBz
TwqxGdji7xMhmuK6Sojwf5zeJb2y57OPcnG9XkXRsFEiS7JfydKommRqs4XIKN+8
691cLcikHve/BZa05/q9AkEAlvTDF2W3JdqMPmTP87PpQYZRJyXSdYALquaq+T+h
Rruxjq1DZw+7LdF1q9SuGn3NYU5FsKMQGZ5ejWZP2IXQGw==
-----END RSA PRIVATE KEY-----
---
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
---
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbBEOrnpqVKvi16DGMAw2dRDUS
+T05+4XY7J7DxAv2/qj4qAgkPoUyDl9olkS2iHxmr2rRqLDNgFd2YkHnH//kWRN3
8opXJBzPU1friwSSP/7oW+kz2ZpeCFy1TdJi6KYI6awZ2NTU24U8C2snzbfmjniw
5dwX53I5vfaU6CBYfQIDAQAB
-----END PUBLIC KEY--------

RSA

window = this;
const JSEncrypt = require('jsencrypt');// 加密
const public_key = '-----BEGIN PUBLIC KEY-----\n' +'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbBEOrnpqVKvi16DGMAw2dRDUS\n' +'+T05+4XY7J7DxAv2/qj4qAgkPoUyDl9olkS2iHxmr2rRqLDNgFd2YkHnH//kWRN3\n' +'8opXJBzPU1friwSSP/7oW+kz2ZpeCFy1TdJi6KYI6awZ2NTU24U8C2snzbfmjniw\n' +'5dwX53I5vfaU6CBYfQIDAQAB\n' +'-----END PUBLIC KEY-----'
const crypt = new JSEncrypt();
crypt.setKey(public_key); // crypt.setPublicKey()
const text = 'qwwqww';
const enc_str = crypt.encrypt(text);
console.log(`enc_str=[${enc_str}]`);// 解密
const private_key = '-----BEGIN RSA PRIVATE KEY-----\n' +'MIICXgIBAAKBgQDbBEOrnpqVKvi16DGMAw2dRDUS+T05+4XY7J7DxAv2/qj4qAgk\n' +'PoUyDl9olkS2iHxmr2rRqLDNgFd2YkHnH//kWRN38opXJBzPU1friwSSP/7oW+kz\n' +'2ZpeCFy1TdJi6KYI6awZ2NTU24U8C2snzbfmjniw5dwX53I5vfaU6CBYfQIDAQAB\n' +'AoGBAM20uaJNez8zdxnTlgW9MGJPl9HUSo9VECfoRk30qpA4K5gwqkTwe8XB/haL\n' +'XMpccws3Iwr8d+Lr8jn8m41rXrjrP+irEnxzTYVTvjSaoNQxfICLGuD/mxali+e+\n' +'N1Y90NKUjOn3Xng+rDEp/mi4/cydoCe9FbFF89yIr4i/C4UBAkEA91caCUsrWa+D\n' +'M/vtv/rtu3edwKVUDMA5dGNB6SJZV+dJtENAztxcaO5Ssw56Wj64nWAkc5r7KqwH\n' +'XwHtA/5hYQJBAOKvTL0oNzQqCUQrAX25oz5luoRksBp1L/7wuExcktsaSsTalams\n' +'JaWAZUf1/Xaj6yBhRC79Zy8fvKdauiWCoJ0CQQDTsMXE7IQWx4P4ywcqR76Os4rd\n' +'5eJw41iJR6aSvWZQONE5KlJeefXRjSBUxfBsKsBhWXb5RszvMbtBUmmkAGUhAkBz\n' +'TwqxGdji7xMhmuK6Sojwf5zeJb2y57OPcnG9XkXRsFEiS7JfydKommRqs4XIKN+8\n' +'691cLcikHve/BZa05/q9AkEAlvTDF2W3JdqMPmTP87PpQYZRJyXSdYALquaq+T+h\n' +'Rruxjq1DZw+7LdF1q9SuGn3NYU5FsKMQGZ5ejWZP2IXQGw==\n' +'-----END RSA PRIVATE KEY-----';
const crypt_d = new JSEncrypt();
crypt_d.setKey(private_key);
const dec = crypt_d.decrypt(enc_str);
console.log(`dec_str=[${dec}]`);// ==
// 另一种加密方式
const jscrypt = new JSEncrypt();
const rsa_key = jscrypt.getKey();
// rsa_key.setPublic('publi_key', 'exp_值')
const public_key_ = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbBEOrnpqVKvi16DGMAw2dRDUS+T05+4XY7J7DxAv2/qj4qAgkPoUyDl9olkS2iHxmr2rRqLDNgFd2YkHnH//kWRN38opXJBzPU1friwSSP/7oW+kz2ZpeCFy1TdJi6KYI6awZ2NTU24U8C2snzbfmjniw5dwX53I5vfaU6CBYfQIDAQAB';
rsa_key.setPublic(public_key_)
console.log(rsa_key.encrypt('qwwqww'));//====输出====
enc_str=[go3BXf2TJ5Xsa5zXuGjr/enlpdLM5Y/f2Q7+BQETo4lA6iBlU+zd4aKzEHMF8WHZeZM7hjgY7jEeTzN4QyU6dAW92WZs23IA0ja7G1Ol0zzaQbJdbusPptYMvuQlncUsi2TpdJkXR/uxU9GTmA1/1p1AucLLzt3kFn832k2xDhI=]
dec_str=[qwwqww]
Invalid RSA public key
0e9810cabb7423cd4bbc5ef96ae7ab771f9d2f7d3b503df2d1fc799dff7a098923270a98edecfee365988baa119ec8703c11883246f8313f6028e0439794c8c9f6e39f63eb04a23f543c9f4625fb1255f19502a3e2c633d2599c7037da8a246a3720a669f66ac6c3083b9234e951df8083f66924b45b564fd42e282f8ccc56fe

这篇关于js aes加密 md5摘要 base64编码 ras加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923898

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软