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=";

您可以定义自己的格式,以便与其他加密实现兼容。
创建一个包含两个方法的对象:Stringifyparse,使他可以在密码对象和密文字符串之间转换。

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 加解密类库的简单用法相关推荐

  1. 前端CryptoJS加解密

    CryptoJS是标准安全加密算法的JavaScript实现,运行速度快,接口简单,见名知意.文档说明可参考:CryptoJS文档说明. CryptoJS的实现主要有哈希算法,HMAC.加密算法.以及 ...

  2. 三分钟撸完前后端crypto-js加解密,你学废了吗?

    文章目录 前言 一.AES概念 二.前端加密 1.安装依赖库 2.实现AES加密算法 3.前端演示效果 三.后端加密 1.加密工具类 2.加密测试 四.Security实现密码加解密 1.前台加密 1 ...

  3. android 文本 加密解密,Android文件简单加解密

    前言 在Android应用开发中,有时需要把一些内容以文件的方式保存到sdcard上,这时我们需要考虑数据的安全性,这就涉及到文件的加解密,这里简单介绍一种文件的加解密实现方法. 实现方案 我们在读写 ...

  4. 文件传输-对数据进行加解密的方法!

    由于项目安全要求,需要使用RSA算法对部分关键数据进行加密,并使用OAEPWithSHA-256AndMGF1对数据进行填充.通过搜索最终选择较为通用OpenSSL库,但OpenSSL的RSA算法默认 ...

  5. 彻底告别加解密模块代码拷贝-JCE核心Cipher详解

    前提 javax.crypto.Cipher,翻译为密码,其实叫做密码器更加合适.Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种 ...

  6. java中密码修改核心代码_彻底告别加解密模块代码拷贝-JCE核心Cpiher详解

    前提 javax.crypto.Cipher,翻译为密码,其实叫做密码器更加合适.Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种 ...

  7. c语言文件嚏怎么写,巩固C语言(十二)----文件加解密

    一 文件的简单加解密----按照字节简单加减进行加解密 #define _CRT_SECURE_NO_WARNINGS #include #include //按照字节的方式进行加解密 //加密 vo ...

  8. JS逆向加解密——python 实现AES加解密

    前言 写爬虫项目,做JS逆向或者APP逆向时,经常遇到网站的很多参数都经过AES加密解密,用python实现AES加解密是非常简单的,免去了扣JS代码,并且实现格式固定,所以本文提供实现好的AES加解 ...

  9. 自动加解密请求包响应包插件(autoDecoder)

    之前所立的一个flag:明文传,明文响应:密文传,密文响应 0x01 背景 当数据包里都是密文,我们无从下手:就算是获得了加解密的一些关键信息,能解密出来,但是每个数据包我们都需要慢慢解密,请求包需要 ...

  10. 区块链之加解密算法数字证书

    目录 一.加解密算法 数字签名 对称加密 DES(Data EncryptionStandard) 3DES(Triple DES) AES(Advanced EncryptionStandard) ...

最新文章

  1. Unity优化手机游戏学习教程
  2. 时序数据库深入浅出之存储篇——本质LSMtree,同时 metric(比如温度)+tags 分片...
  3. LIVE555再学习 -- 初识
  4. java 局部性原理_程序局部性原理
  5. 阿里云三维可视化使用初体验
  6. 计算机应用技术基础考试分值,计算机一级考试内容包括哪些 试题分值上是如何分布的...
  7. python 正则匹配电话与ip
  8. 一年复一年,又单身到了光棍节
  9. 恩智浦半导体推出近距离非接触式读卡器IC CLRC663
  10. 悟空CRM测试用例执行,项目评审
  11. LeetCode 刷题记录模板
  12. xtu 1369 Black White Chess
  13. 创新创业名词解释_大学生创新创业指导_知到网课答案
  14. 给五子棋加个功能叫悔棋
  15. java任意音频格式转换MP3格式
  16. Alkyne-PEG-OH 炔烃PEG羟基Alkyne-PEG-OH 炔烃PEG羟基
  17. JVM 之 JDK安装与配置
  18. 百度网盘青春版:我就糊弄一下
  19. 英语小短文翻译1——The Significance of Books
  20. 公众号照片打印机实现原理

热门文章

  1. JAVA远程读取服务器文件
  2. linux系统双显卡切换显卡驱动,自动化系统Linux显卡驱动及BIOS设置笔记(NVIDIA/ATI)...
  3. IBM ServerGuide 8.42
  4. 【老生谈算法】matlab实现傅里叶变换算法源码——傅里叶变换
  5. 三维可视化JavaScript组件接口
  6. 网吧服务器系统机房图片,网吧云服务器机房
  7. Excel批量插入图片小技巧
  8. windows android系统,手机装windows系统详细方法
  9. win7系统服务器管理器在哪里找,win7打开服务管理器
  10. 18650锂电池保护板接线图_12v锂电池保护板电路图 - 全文