在移动App的开发过程中,加解密是确保数据安全的常用手段之一。js中常用的加解密库成熟的非常多,今天重点介绍在React Native环境下的加解密库react-native-crypto。
react-native-crypto,是由crypto封装而来,支持如下的加解密算法、
-
createHash (sha1, sha224, sha256, sha384, sha512, md5, rmd160)
-
createHmac (sha1, sha224, sha256, sha384, sha512, md5, rmd160)
-
pbkdf2
-
pbkdf2Sync
-
randomBytes
-
pseudoRandomBytes
-
createCipher (aes)
-
createDecipher (aes)
-
createDiffieHellman
-
createSign (rsa, ecdsa)
-
createVerify (rsa, ecdsa)
-
createECDH (secp256k1)
-
publicEncrypt/privateDecrypt (rsa)
-
randomFillSync
-
randomFill
接下来上干活,介绍在React Native环境下如何安装、使用及注意实现
1.安装
通常采用npm的方式进行,今天小编推荐采用yarn的方式。yarn要比npm快非常非常非常多,就一个爽,具体命令如下:
yarn add react-native-crypto
# install peer deps
yarn add react-native-randombytes
react-native link react-native-randombytes #若环境变量没有配置的话,可能会执行不成功,但不要紧,不会影响后续使用
# install latest rn-nodeify
yarn add rn-nodeify@latest
上述命令执行完成后,react-native-crypto算是安装完成了,接下来需要使用rn-nodeify进行脚本配置,命令如下:
# install node core shims and recursively hack package.json files
# in ./node_modules to add/update the "browser"/"react-native" field with relevant mappings
./node_modules/.bin/rn-nodeify --hack --install
有可能会执行失败,如果失败的话,可以使用最简单的方法进行排除。直接删除node_modules目录,重新同步项目资源后,重新执行上述命令。小编在安装过程中,这个命令失败的概率超过50%,若不成功可以反复上述指导,直到成功位置。这个命令成功执行后,你会发现在你的项目根目录下多出个shim.js的文件
2.使用
在需要使用的文件中引入如下代码,即可使用
import './shim.js'
import crypto from 'crypto'
以下附上小编在项目中的范例代码
const iv = Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
const cipherPassword = crypto.createCipheriv('aes128', Buffer.from(ASE128Key), iv);
var PasswordCipher = cipherPassword.update(Buffer.from(Pwd), 'utf8', 'hex');
此范例为采用ase128对密码进行加密,具体使用时,替换其中AES128Key和Pwd。
小编的项目中因为需要与硬件进行通信,加解密都是在字节的基础上进行的,所以在加密过程中都是将内容转成了ascii数据后完成的,这点有别于js的常用场景。通常情况js下的解密是基于字符串的。
3.使用心得
3.1使用过程中,有不了解react-native-crypto究竟支持哪些算法的,可以使用crypto.getCiphers()得到
3.2小编的项目需要在字节的基础上进行加解密,所以采用的函数crypto.createCipheriv而不是crypto.createCipher。若是字符串的加解密,可以使用后者
3.3react-native-crypto成功安装后,会增加不少福利,项目中除了有react-native-crypto我们直接需要的工具包外,还会多出tcp、udp、http、https等工具包(这里需要格外注意,有可能会与你项目中目前在用的工具包冲突),另外会将常用的工具包做别名处理,已方便后续使用,可以详见package.json
上述对react-native-crypto简单介绍,若对您有帮助,请帮忙点个赞,谢谢!若有不清楚的地方,可以留言,我会给您做详细解答