
基于@ohos/crypto-js实现加解密工具箱
@ohos/crypto-js简介
@ohos/crypto-js是一个根据crypto-js库移植的鸿蒙三方库,适配源库4.2.0版本,提供了一系列加密算法和安全工具,主要用于执行各种消息摘要计算和对称加解密操作。
@ohos/crypto-js与cryptoFramework规格对比
算法类别 | 算法名称 | @ohos/crypto-js | cryptoFramework |
消息摘要 | MD5 | 支持 | 支持 |
SHA-1 | 支持 | 支持 | |
SHA-2 | 支持 | 支持 | |
SHA-3 | 支持 | 不支持 | |
RIPEMD160 | 支持 | 不支持 | |
SM3 | 不支持 | 支持 | |
消息认证码 | HMAC | 支持 | 支持 |
密钥派生 | PBKDF2 | 支持 | 支持 |
EVPKDF | 支持 | 不支持 | |
对称加解密 | AES | 支持 | 支持 |
DES | 支持 | 不支持 | |
TripleDES | 支持 | 支持 | |
RC4 | 支持 | 不支持 | |
Rabbit | 支持 | 不支持 | |
Rabbit-legacy | 支持 | 不支持 | |
SM4 | 不支持 | 支持 | |
非对称加解密 | RSA | 不支持 | 支持 |
SM2 | 不支持 | 支持 |
@ohos/crypto-js不支持国密算法和非对称加解密算法,国密算法可以使用三方库@yyz116/sm-crypto
消息摘要算法
MD5算法
MD5(Message-Digest Algorithm 5)是一种广泛使用的散列函数,用于生成128位(32个十六进制数字)的消息摘要。
demo展示
代码实现
根据数据量,可以分段也可以不分段,该算法库目前没有对单次加密的数据量设置大小限制。
建议对于大数据量的对称加解密,采用多次分段的方式传入数据。
- 一次性加密
调用CryptoJS.MD5接口,传入明文,生成密文。
- 分段加密
根据数据量,可以分段也可以不分段,该算法库目前没有对单次加密的数据量设置大小限制。
建议对于大数据量的对称加解密,采用多次分段的方式传入数据。
调用CryptoJS.algo.MD5.create接口创建Hasher对象,通过update方法传入多段明文,通过finalize方法生成密文。
SHA算法
demo展示
SHA-1
SHA-1是基于MD4散列算法设计的,SHA-1接受最大长度为2^64位的消息,并生成一个160位的散列值。
代码实现
根据数据量,可以分段也可以不分段,该算法库目前没有对单次加密的数据量设置大小限制。
建议对于大数据量的对称加解密,采用多次分段的方式传入数据。
- 一次性加密
调用CryptoJS.SHA1接口,传入明文,生成密文。
- 分段加密
根据数据量,可以分段也可以不分段,该算法库目前没有对单次加密的数据量设置大小限制。
建议对于大数据量的对称加解密,采用多次分段的方式传入数据。
调用CryptoJS.algo.SHA1.create接口创建Hasher对象,通过update方法传入多段明文,通过finalize方法生成密文。
SHA-2
SHA-2是一系列散列函数的统称,包括SHA-224、SHA-256、SHA-384和SHA-512等。
代码实现
- 一次性加密(以SHA-256为例)
调用CryptoJS.SHA256接口,传入明文,生成密文。
- 分段加密(以SHA-256为例)
根据数据量,可以分段也可以不分段,该算法库目前没有对单次加密的数据量设置大小限制。
建议对于大数据量的对称加解密,采用多次分段的方式传入数据。
调用CryptoJS.algo.SHA256.create接口创建Hasher对象,通过update方法传入多段明文,通过finalize方法生成密文。
SHA-3
SHA-3是NIST在2015年正式发布的散列函数标准,采用了全新的结构。
代码实现
- 一次性加密
调用CryptoJS.SHA3接口,传入明文与输出长度,生成密文。输出长度可以为224、256、384、512,默认为512。
- 分段加密
根据数据量,可以分段也可以不分段,该算法库目前没有对单次加密的数据量设置大小限制。
建议对于大数据量的对称加解密,采用多次分段的方式传入数据。
调用CryptoJS.algo.SHA3.create接口并配置输出长度创建Hasher对象,通过update方法传入多段明文,通过finalize方法生成密文。
消息认证码算法
HMAC算法
HMAC(Hash-based Message Authentication Code)是一种基于哈希函数和密钥的消息认证码算法。
demo展示
代码实现
根据数据量,可以分段也可以不分段,该算法库目前没有对单次加密的数据量设置大小限制。
建议对于大数据量的对称加解密,采用多次分段的方式传入数据。
- 一次性加密(以SHA-256为例)
调用CryptoJS.HmacSHA256接口,传入明文与密钥,生成密文。
- 分段加密(以SHA-256为例)
调用 CryptoJS.algo.HMAC.create接口,配置HasherStatic对象和密钥创建HMAC对象,HasherStatic可以使用crypto-js支持的任意摘要算法,如CryptoJS.algo.SHA256。通过update方法传入多段明文,通过finalize方法生成密文。
密钥派生算法
PBKDF2算法
PBKDF2(Password-Based Key Derivation Function 2)是一种基于密码的密钥生成算法。
demo展示
代码实现
根据数据量,可以分段也可以不分段,该算法库目前没有对单次加密的数据量设置大小限制。
建议对于大数据量的对称加解密,采用多次分段的方式传入数据。
- 一次性加密(以SHA256为例)
调用CryptoJS.PBKDF2接口,参数为密码、盐值、密钥长度、消息摘要算法、迭代次数,生成新密码。
- 分段加密(以SHA256为例)
调用CryptoJS.algo.PBKDF2.create接口,配置密钥长度、消息摘要算法、迭代次数创建PBKDF2对象。
通过compute方法传入分段密码和盐值生成密码WordArray对象,通过数组克隆与拼接操作生成完整新密码。
对称加解密算法
DES算法
DES(Data Encryption Standard)加密是一种对称加密算法。
demo展示
代码实现
根据数据量,可以分段也可以不分段,该算法库目前没有对单次加密的数据量设置大小限制。
建议对于大数据量的对称加解密,采用多次分段的方式传入数据。
- 一次性加密
DES加密可以配置的加密参数为明文、密钥、模式、填充、偏移量。
明文、密钥、偏移量通常会在加解密前解析成对应编码的WordArray对象。
crypto-js支持的加密模式:CBC、ECB、CFB、CTR、OFB。
crypto-js支持的填充方式:Pkcs7、Iso97971、AnsiX923、Iso10126、ZeroPadding、NoPadding。
当不传入模式、填充、偏移量时,会默认使用CBC加密模式、Pkcs7填充方式和一个随机生成的偏移量。
ECB模式不需要偏移量。
- 一次性解密
@ohos/crypto-js只能解密格式为Base64的密文,如果密文是其他格式,需要先转换成Base64。
解密返回的结果必须用Utf8格式转为明文。
- 分段加密
调用CryptoJS.algo.DES.createEncryptor接口,配置密钥、模式、填充、偏移量创建DES加密算法对象,调用process方法传入分段明文WordArray对象生成分段密文WordArray对象,通过数组克隆与拼接操作生成完整密文。
- 分段解密
调用CryptoJS.algo.DES.createDecryptor接口,配置密钥、模式、填充、偏移量创建DES解密算法对象,调用process方法传入分段密文WordArray对象生成分段明文WordArray对象,通过数组克隆与拼接操作生成完整明文,并转为utf8格式显示。
