JavaScript加密库Crypto-JS的使用

简介

Crypto-JS是一个标准的JavaScript加密库。支持多种加密算法模块,例如:MD5、SHA-1、SHA-256、SHA-512、SHA-3、AES、DES、HMAC等加密算法。

使用说明

引入Crypto-JS核心库crypto-js.min.js

1
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

MD5

MD5是一种被广泛使用的散列函数。它被用于各种安全应用程序,并且通常用于检查文件的完整性。但是,MD5没有抗冲突性,它不适合像SSL证书或依赖于此属性的数字签名这样的应用程序。

1
2
3
4
5
6
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
var hash = CryptoJS.MD5("123456");
alert(hash);
</script>

SHA-1

SHA散列函数是由国家安全局(NSA)设计的。SHA-1是最成熟的SHA散列函数,它用于各种安全应用程序和协议。虽然,SHA-1的碰撞性已发现新的攻击或改进的削弱。

1
2
3
4
5
6
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
var hash = CryptoJS.SHA1("123456");
alert(hash);
</script>

SHA-256

SHA-256是一个在SHA-2设置四个变种。它不是作为广泛使用的SHA-1,虽然它似乎提供了更好的安全性。

1
2
3
4
5
6
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
var hash = CryptoJS.SHA256("123456");
alert(hash);
</script>

SHA-512

SHA-512是SHA-256基本相同但运行在64位的而不是32。

1
2
3
4
5
6
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
var hash = CryptoJS.SHA512("123456");
alert(hash);
</script>

SHA-3

1
2
3
4
5
6
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
var hash = CryptoJS.SHA3("123456");
alert(hash);
</script>

SHA-3 可以配置为输出224, 256, 384个或512个比特中的一个的哈希长度。默认值是512位。

1
2
3
4
5
6
<script type="text/javascript">
var hash = CryptoJS.SHA3("123456", { outputLength: 512 });
var hash = CryptoJS.SHA3("123456123456", { outputLength: 384 });
var hash = CryptoJS.SHA3("123456", { outputLength: 256 });
var hash = CryptoJS.SHA3("123456", { outputLength: 224 });
</script>

RIPEMD-160

1
2
3
4
5
6
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
var hash = CryptoJS.RIPEMD160("123456");
alert(hash);
</script>

HMAC

消息认证码(HMAC)是一种利用Hash函数的消息认证机制。

HMAC可以用在任何迭代加密哈希函数组合。

1
2
3
4
5
6
7
8
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
var hash = CryptoJS.HmacMD5("Message", "Secret Passphrase");
var hash = CryptoJS.HmacSHA1("Message", "Secret Passphrase");
var hash = CryptoJS.HmacSHA256("Message", "Secret Passphrase");
var hash = CryptoJS.HmacSHA512("Message", "Secret Passphrase");
</script>

PBKDF2

PBKDF2是基于密码的密钥导出函数。在密码学的许多应用中,用户安全归根结底依赖于密码,由于密码通常不能直接用作加密密钥,所以需要进行某些处理。

一个盐为任何给定的密码提供了一组大的密钥,并且迭代计数增加了从密码生成密钥的成本,因此也增加了攻击的难度。

1
2
3
4
5
6
7
8
9
10
11
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
var salt = CryptoJS.lib.WordArray.random(128/8);

var key128Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 128/32 });
var key256Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 256/32 });
var key512Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 512/32 });

var key512Bits1000Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 512/32, iterations: 1000 });
</script>

AES

高级加密标准(AES)是一个美国联邦信息处理标准(FIPS)。它是在5年的过程中选出的,其中有15个相互竞争的设计进行了评估。

1
2
3
4
5
6
7
8
9
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
//加密
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");

//解密
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
</script>

DES

DES加密算法和以前占主导地位的,是作为官方发布的联邦信息处理标准(FIPS)。由于小密钥大小,DES现在被认为是不安全的。

1
2
3
4
5
6
7
8
9
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
//加密
var encrypted = CryptoJS.DES.encrypt("Message", "Secret Passphrase");

//解密
var decrypted = CryptoJS.DES.decrypt(encrypted, "Secret Passphrase");
</script>

Triple DES

Triple DES对每个块应用DES三次以增加密钥大小。该算法被认为是安全的,在这种形式。

1
2
3
4
5
6
7
8
9
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
//加密
var encrypted = CryptoJS.TripleDES.encrypt("Message", "Secret Passphrase");

//解密
var decrypted = CryptoJS.TripleDES.decrypt(encrypted, "Secret Passphrase");
</script>

Rabbit

Rabbit 是一种高性能的流密码和eSTREAM组合入围。这是3个1年/两年的过程中选择的四个设计之一,其中22个设计进行了评估。

1
2
3
4
5
6
7
8
9
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
//加密
var encrypted = CryptoJS.Rabbit.encrypt("Message", "Secret Passphrase");

//解密
var decrypted = CryptoJS.Rabbit.decrypt(encrypted, "Secret Passphrase");
</script>

RC4

RC4流密码是一种广泛使用的。它采用流行的协议,如SSL和WEP。尽管算法简单且速度快,但它的历史并不能激发人们对其安全性的信心。

1
2
3
4
5
6
7
8
9
<script src="https://cdn.bootcss.com/crypto-js/3.1.9/crypto-js.min.js"></script>

<script type="text/javascript">
//加密
var encrypted = CryptoJS.RC4.encrypt("Message", "Secret Passphrase");

//解密
var decrypted = CryptoJS.RC4.decrypt(encrypted, "Secret Passphrase");
</script>

发现密钥的前几个字节是强烈的非随机和泄漏信息的关键。我们可以抵御这种攻击通过丢弃的密钥流的初始部分。这种改进后的算法是传统上被称为RC4滴。

默认情况下,将删除192个单词(768字节),但您可以配置该算法来删除任意数量的单词。

1
2
3
4
5
6
7
<script type="text/javascript">
//加密
var encrypted = CryptoJS.RC4Drop.encrypt("Message", "Secret Passphrase", { drop: 3072/4 });

//解密
var decrypted = CryptoJS.RC4Drop.decrypt(encrypted, "Secret Passphrase", { drop: 3072/4 });
</script>

源码下载

https://github.com/brix/crypto-js