CryptoJS 加解密类库的简单用法
CryptoJS 介绍
一个基于javscript编写的前端加解密js库。
官方文档
CryptoJS Document
以下部分文档摘自官方文档
Hash
MD5
> CryptoJS.MD5("admin").toString()
< "21232f297a57a5a743894a0e4a801fc3"
SHA1
> CryptoJS.SHA1("admin").toString()
< "d033e22ae348aeb5660fc2140aec35850c4da997"
SHA224/SHA256/SHA384/SHA512
> CryptoJS.SHA256("admin").toString()
< "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"
RIPEMD-160
> CryptoJS.RIPEMD160("admin").toString()
< "7dd12f3a9afa0282a575b8ef99dea2a0c1becb51"
输出格式
以上几个toString()方法可以选择传入CryptoJS.enc.Base64或其他的编码方式
> CryptoJS.MD5("admin").toString()
< "21232f297a57a5a743894a0e4a801fc3"
渐进式Hash
var sha256 = CryptoJS.algo.SHA256.create();
sha256.update("Message Part 1");
sha256.update("Message Part 2");
sha256.update("Message Part 3");
var hash = sha256.finalize();
HMAC
var hash = CryptoJS.HmacMD5("Message", "密语");
var hash = CryptoJS.HmacSHA1("Message", "密语");
var hash = CryptoJS.HmacSHA256("Message", "密语");
var hash = CryptoJS.HmacSHA512("Message", "密语");
Base64 编解码
Encode
> CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse("塞北的雪"))
< "5aGe5YyX55qE6Zuq"
Eecode
> CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse("5aGe5YyX55qE6Zuq"))
< "塞北的雪"
sample
// 输出
console.log(encode('塞北的雪')); // '5aGe5YyX55qE6Zuq'
console.log(decode('5aGe5YyX55qE6Zuq')); // '塞北的雪'function encode(str) {encodedWord = CryptoJS.enc.Utf8.parse(str);encoded = CryptoJS.enc.Base64.stringify(encodedWord);return encoded;
}function decode(encoded ) {encodedWord = CryptoJS.enc.Base64.parse(encoded);decoded = CryptoJS.enc.Utf8.stringify(encodedWord);return decoded;
}
加解密
AES
var encrypted = CryptoJS.AES.encrypt("明文", "密语");
var decrypted = CryptoJS.AES.decrypt(encrypted, "密语");
RC4
var encrypted = CryptoJS.RC4.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.RC4.decrypt(encrypted, "Secret Passphrase");
var encrypted = CryptoJS.RC4Drop.encrypt("Message", "Secret Passphrase");
var encrypted = CryptoJS.RC4Drop.encrypt("Message", "Secret Passphrase", {drop: 3072 / 4
});
var decrypted = CryptoJS.RC4Drop.decrypt(encrypted, "Secret Passphrase", {drop: 3072 / 4
});
DES, Triple DES(3DES)
var encrypted = CryptoJS.DES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.DES.decrypt(encrypted, "Secret Passphrase");
var encrypted = CryptoJS.TripleDES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.TripleDES.decrypt(encrypted, "Secret Passphrase");
自定义Key和IV
var key = CryptoJS.enc.Hex.parse("000102030405060708090a0b0c0d0e0f");
var iv = CryptoJS.enc.Hex.parse("101112131415161718191a1b1c1d1e1f");
var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv });
Block Modes and padding 块模式和填充规则
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase", {mode: CryptoJS.mode.CFB,padding: CryptoJS.pad.AnsiX923
});
CryptoJS 支持以下块模式
- CBC (the default)
- List item
- CFB
- CTR
- OFB
- ECB
CryptoJS 支持以下填充规则
- Pkcs7 (the default)
- Iso97971
- AnsiX923
- Iso10126
- ZeroPadding
- NoPadding
密码输入格式
对于明文消息,密码算法接受字符串或CryptoJS.lib.WordArray对象。
For the key, when you pass a string, it’s treated as a passphrase and used to derive an actual key and IV. Or you can pass a WordArray that represents the actual key.
If you pass the actual key, you must also pass the actual IV.对于密文,密码算法接受字符串或CryptoJS.lib.CipherParams对象。
A CipherParams object represents a collection of parameters such as the IV, a salt, and the
raw ciphertext itself.
When you pass a string, it’s automatically converted to a CipherParams object according to a configurable format strategy.
密文输出格式
The plaintext you get back after decryption is a WordArray object. See
Hashing’s Output for more detail. The ciphertext you get back after
encryption isn’t a string yet. It’s a CipherParams object. A
CipherParams object gives you access to all the parameters used during
encryption. When you use a CipherParams object in a string context,
it’s automatically converted to a string according to a format
strategy. The default is an OpenSSL-compatible format.
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
encrypted.key
> "74eb593087a982e2a6f5dded54ecd96d1fd0f3d44a58728cdcd40c55227522223 ";
encrypted.iv
> "7781157e2629b094f0e3dd48c4d786115";
encrypted.salt
> "7a25f9132ec6a8b34";
encrypted.ciphertext
> "73e54154a15d1beeb509d9e12f1e462a0";
encrypted
> "U2FsdGVkX1+iX5Ey7GqLND5UFUoV0b7rUJ2eEvHkYqA=";
您可以定义自己的格式,以便与其他加密实现兼容。
创建一个包含两个方法的对象:Stringify
和parse
,使他可以在密码对象和密文字符串之间转换。
var JsonFormatter = {stringify: function(cipherParams) {// create json object with ciphertextvar jsonObj = { ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64) };
// optionally add iv or saltif (cipherParams.iv) {jsonObj.iv = cipherParams.iv.toString();}
if (cipherParams.salt) {jsonObj.s = cipherParams.salt.toString();}
// stringify json objectreturn JSON.stringify(jsonObj);},parse: function(jsonStr) {// parse json stringvar jsonObj = JSON.parse(jsonStr);
// extract ciphertext from json object, and create cipher params objectvar cipherParams = CryptoJS.lib.CipherParams.create({ciphertext: CryptoJS.enc.Base64.parse(jsonObj.ct)});
// optionally extract iv or salt
if (jsonObj.iv) {cipherParams.iv = CryptoJS.enc.Hex.parse(jsonObj.iv);}
if (jsonObj.s) {cipherParams.salt = CryptoJS.enc.Hex.parse(jsonObj.s);}
return cipherParams;}
};
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase", {format: JsonFormatter
});encrypted
> {ct: "tZ4MsEnfbcDOwqau68aOrQ==",iv: "8a8c8fd8fe33743d3638737ea4a00698",s: "ba06373c8f57179c"};
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase", {format: JsonFormatter
});
decrypted.toString(CryptoJS.enc.Utf8)
> "Message";
渐进式加密
var key = CryptoJS.enc.Hex.parse("000102030405060708090a0b0c0d0e0f");
var iv = CryptoJS.enc.Hex.parse("101112131415161718191a1b1c1d1e1f");
// encrypt
var aesEncryptor = CryptoJS.algo.AES.createEncryptor(key, { iv: iv });
var ciphertextPart1 = aesEncryptor.process("Message Part 1");
var ciphertextPart2 = aesEncryptor.process("Message Part 2");
var ciphertextPart3 = aesEncryptor.process("Message Part 3");
var ciphertextPart4 = aesEncryptor.finalize();
// decrypt
var aesDecryptor = CryptoJS.algo.AES.createDecryptor(key, { iv: iv });
var plaintextPart1 = aesDecryptor.process(ciphertextPart1);
var plaintextPart2 = aesDecryptor.process(ciphertextPart2);
var plaintextPart3 = aesDecryptor.process(ciphertextPart3);
var plaintextPart4 = aesDecryptor.process(ciphertextPart4);
var plaintextPart5 = aesDecryptor.finalize();
与OpenSSL互相加解密
- 使用OpenSSL加密
openssl enc -aes-256-cbc -in infile -out outfile -pass pass:"Secret Passphrase" -e -base64
- 使用CryptoJS解密
var decrypted = CryptoJS.AES.decrypt(openSSLEncrypted, "Secret Passphrase");
编码
Cryptojs可以将Base64,Latin1或HEX等编码格式与WordArray对象相互转换。
var words = CryptoJS.enc.Base64.parse("SGVsbG8sIFdvcmxkIQ==");
var base64 = CryptoJS.enc.Base64.stringify(words);
var words = CryptoJS.enc.Latin1.parse("Hello, World!");
var latin1 = CryptoJS.enc.Latin1.stringify(words);
var words = CryptoJS.enc.Hex.parse("48656c6c6f2c20576f726c6421");
var hex = CryptoJS.enc.Hex.stringify(words);
var words = CryptoJS.enc.Utf8.parse("
CryptoJS 加解密类库的简单用法相关推荐
- 前端CryptoJS加解密
CryptoJS是标准安全加密算法的JavaScript实现,运行速度快,接口简单,见名知意.文档说明可参考:CryptoJS文档说明. CryptoJS的实现主要有哈希算法,HMAC.加密算法.以及 ...
- 三分钟撸完前后端crypto-js加解密,你学废了吗?
文章目录 前言 一.AES概念 二.前端加密 1.安装依赖库 2.实现AES加密算法 3.前端演示效果 三.后端加密 1.加密工具类 2.加密测试 四.Security实现密码加解密 1.前台加密 1 ...
- android 文本 加密解密,Android文件简单加解密
前言 在Android应用开发中,有时需要把一些内容以文件的方式保存到sdcard上,这时我们需要考虑数据的安全性,这就涉及到文件的加解密,这里简单介绍一种文件的加解密实现方法. 实现方案 我们在读写 ...
- 文件传输-对数据进行加解密的方法!
由于项目安全要求,需要使用RSA算法对部分关键数据进行加密,并使用OAEPWithSHA-256AndMGF1对数据进行填充.通过搜索最终选择较为通用OpenSSL库,但OpenSSL的RSA算法默认 ...
- 彻底告别加解密模块代码拷贝-JCE核心Cipher详解
前提 javax.crypto.Cipher,翻译为密码,其实叫做密码器更加合适.Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种 ...
- java中密码修改核心代码_彻底告别加解密模块代码拷贝-JCE核心Cpiher详解
前提 javax.crypto.Cipher,翻译为密码,其实叫做密码器更加合适.Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种 ...
- c语言文件嚏怎么写,巩固C语言(十二)----文件加解密
一 文件的简单加解密----按照字节简单加减进行加解密 #define _CRT_SECURE_NO_WARNINGS #include #include //按照字节的方式进行加解密 //加密 vo ...
- JS逆向加解密——python 实现AES加解密
前言 写爬虫项目,做JS逆向或者APP逆向时,经常遇到网站的很多参数都经过AES加密解密,用python实现AES加解密是非常简单的,免去了扣JS代码,并且实现格式固定,所以本文提供实现好的AES加解 ...
- 自动加解密请求包响应包插件(autoDecoder)
之前所立的一个flag:明文传,明文响应:密文传,密文响应 0x01 背景 当数据包里都是密文,我们无从下手:就算是获得了加解密的一些关键信息,能解密出来,但是每个数据包我们都需要慢慢解密,请求包需要 ...
- 区块链之加解密算法数字证书
目录 一.加解密算法 数字签名 对称加密 DES(Data EncryptionStandard) 3DES(Triple DES) AES(Advanced EncryptionStandard) ...
最新文章
- Unity优化手机游戏学习教程
- 时序数据库深入浅出之存储篇——本质LSMtree,同时 metric(比如温度)+tags 分片...
- LIVE555再学习 -- 初识
- java 局部性原理_程序局部性原理
- 阿里云三维可视化使用初体验
- 计算机应用技术基础考试分值,计算机一级考试内容包括哪些 试题分值上是如何分布的...
- python 正则匹配电话与ip
- 一年复一年,又单身到了光棍节
- 恩智浦半导体推出近距离非接触式读卡器IC CLRC663
- 悟空CRM测试用例执行,项目评审
- LeetCode 刷题记录模板
- xtu 1369 Black White Chess
- 创新创业名词解释_大学生创新创业指导_知到网课答案
- 给五子棋加个功能叫悔棋
- java任意音频格式转换MP3格式
- Alkyne-PEG-OH 炔烃PEG羟基Alkyne-PEG-OH 炔烃PEG羟基
- JVM 之 JDK安装与配置
- 百度网盘青春版:我就糊弄一下
- 英语小短文翻译1——The Significance of Books
- 公众号照片打印机实现原理
热门文章
- JAVA远程读取服务器文件
- linux系统双显卡切换显卡驱动,自动化系统Linux显卡驱动及BIOS设置笔记(NVIDIA/ATI)...
- IBM ServerGuide 8.42
- 【老生谈算法】matlab实现傅里叶变换算法源码——傅里叶变换
- 三维可视化JavaScript组件接口
- 网吧服务器系统机房图片,网吧云服务器机房
- Excel批量插入图片小技巧
- windows android系统,手机装windows系统详细方法
- win7系统服务器管理器在哪里找,win7打开服务管理器
- 18650锂电池保护板接线图_12v锂电池保护板电路图 - 全文