React Native AES加密

简介: 1). 加密库--aes-js2). 创建加密工具类// 获取Aes加密// npm i aes-jslet aes = require('aes-js');// 默认KEY - An example 128-bit keylet _k...
1). 加密库--aes-js
2). 创建加密工具类
// 获取Aes加密
// npm i aes-js
let aes = require('aes-js');

// 默认KEY - An example 128-bit key
let _key = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ];
// 默认IV - The initialization vector (must be 16 bytes)
let _iv = [ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,35, 36 ];

/**
 * @FileName: AesUtil
 * @Author: mazaiting
 * @Date: 2018/7/5
 * @Description: AES加密工具类,使用方法
 *  加密
 *  let encrypted = AesUtil.encrypt("mazaiting");
 *  解密
 *  let decrypted = AesUtil.decrypt("mazaiting");
 */
class AesUtil {
    /**
     * 设置KEY
     * @param key 密钥
     */
    static key(key) {
        if (key.length / 16 !== 0 ) {
            console.warn("密钥无效...")
        }
        _key = key;
    }
    
    /**
     * iv设置无效
     * @param iv iv
     */
    static iv(iv) {
        if (iv.length / 16 !== 0 ) {
            console.warn("密钥无效...")
        }
        _iv = iv;
    }
    
    /**
     * 加密
     * @param text 加密文本
     */
    static encrypt(text) {
        // 将文本转换为字节 - Convert text to bytes
        let textBytes = aes.utils.utf8.toBytes(text);
        // 设置加密模式为 - ofb    ( Output Feedback )
        let aesOfb = new aes.ModeOfOperation.ofb(_key, _iv);
        // 加密数据
        let encryptedBytes = aesOfb.encrypt(textBytes);
        // 将二进制转换为16进制数据 - To print or store the binary data, you may convert it to hex
        return aes.utils.hex.fromBytes(encryptedBytes);
    }
    
    /**
     * 解密
     * @param text 待解密文本
     */
    static decrypt(text) {
        // 将文本转换为字节 - When ready to decrypt the hex string, convert it back to bytes
        let encryptedBytes = aes.utils.hex.toBytes(text);
        // 设置 解密模式
        // The output feedback mode of operation maintains internal state,
        // so to decrypt a new instance must be instantiated.
        let aesOfb = new aes.ModeOfOperation.ofb(_key, _iv);
        // 解密数据
        let decryptedBytes = aesOfb.decrypt(encryptedBytes);
        // 将字节数据转换为字符串 - Convert our bytes back into text
        return aes.utils.utf8.fromBytes(decryptedBytes);
    }
    
}

/**
 * 导出当前Module
 */
module.exports = AesUtil;
3). RN中对Storage数据存取进行加密
import React from 'react';
import {AsyncStorage} from 'react-native';
// npm install react-native-storage --save
import Storage from 'react-native-storage';
// 导入Aes加密工具类
import AesUtil from './../encrypt/AesEncrypt';

class LocalStorage extends Storage {
    /**
     * 存储数据
     * @param params 参数
     */
    save(params) {
        // console.log(params);
        // 加密key
        if (params.hasOwnProperty("key")) {
            let key = params.key;
            // 设置加密后的数据
            params.key = AesUtil.encrypt(key)
        }
        // 加密data
        if (params.hasOwnProperty("data")) {
            let data = params.data;
            let keys = Object.keys(data);
            // 遍历所有的key
            for (let i in keys) {
                // 获取键值
                let key = keys[i];
                let value = data[key];
                // 加密键值
                // let encryptKey = AesUtil.encrypt(key);
                // 设置对应键的值
                data[key] = AesUtil.encrypt(value);
            }
            // console.log("encrypt: " + JSON.stringify(data));
            // 设置加密后的数据
            params.data = data
        }
        // console.log(params);
        super.save(params);
    }
    
    /**
     * 加载数据
     * @param params 参数列表
     */
    load(params) {
        // console.log(params);
        // 加密key
        if (params.hasOwnProperty("key")) {
            let key = params.key;
            // 设置加密后的数据
            params.key = AesUtil.encrypt(key)
        }
        // console.log(params);
        // 加载数据
        return new Promise((resolve, reject) => {
            return super.load(params).then(data => {
                // 如果找到数据,解密
                let keys = Object.keys(data);
                // 遍历所有的key
                for (let i in keys) {
                    // 获取键值
                    let key = keys[i];
                    let value = data[key];
                    // 加密键值
                    // let encryptKey = AesUtil.encrypt(key);
                    // 设置对应键的值
                    data[key] = AesUtil.decrypt(value);
                }
                // console.log("en-data: " + JSON.stringify(data));
                return resolve(data)
            }).catch(reason => {
                reject(reason)
            })
        });
    }
}

const storage = new LocalStorage({
    // 容量
    size: 1000,
    // RN 使用 AsyncStorage
    storageBackend: AsyncStorage,
    // 有效时间
    defaultExpires: 1000 * 3600 * 24,
    // 缓存数据在内存中
    enableCache: true,
    // 数据过期时调用
    sync: {}
});

// RN
global.storage = storage;
目录
相关文章
|
2月前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
8天前
|
Java PHP 数据安全/隐私保护
php和Java配合 aes
php和Java配合 aes加密
12 1
|
15天前
|
存储 安全 数据库
对称加密的日常实践应用:以AES为例的加密解密指南
**摘要:** 本文介绍了对称加密算法AES在数据安全中的应用,强调了其在文件、通信和数据库加密中的重要性。通过Python示例展示了如何使用`cryptography`库实现AES-256的加密和解密,涉及密钥生成、CBC模式及PKCS7填充。同时,提醒注意密钥管理、模式选择和填充方式的选择对加密安全性的影响。
37 1
|
21天前
|
前端开发 自动驾驶 程序员
鸿蒙? 车载?Flutter? React Native? 为什么我劝你三思,说点不一样的
本文探讨了在信息技术快速发展的背景下,开发者如何选择学习路径。作者提倡使用终局思维来规划职业发展,考虑技术的长远影响。终局思维注重长远目标、系统分析、反向规划和动态调整。以车载开发为例,预测未来智能汽车可能由语音助手主导,而非依赖平板界面。此外,作者建议不要过分投入打工状态,应思考创建自己的产品,如App,以实现技能补充和额外收入。选择对未来发展和自主性有益的技术,如Kotlin,比盲目追求热点更为重要。做减法和有标准的选择,能帮助减轻焦虑,实现更高效的成长。关注公众号“AntDream”获取更多相关内容。
31 1
|
24天前
|
开发框架 前端开发 JavaScript
移动应用开发中的跨平台策略:Flutter与React Native的比较
在移动应用领域,跨平台解决方案已成为开发者追求高效、成本效益和广泛覆盖的关键。本文深入探讨了两种领先的跨平台框架——Flutter和React Native,从技术架构、性能、社区生态及实际应用案例四个维度进行全面对比分析。通过这一比较,旨在为移动应用开发者提供选择合适框架的参考依据,帮助他们根据项目需求做出明智的决策。
|
2天前
|
算法 安全 网络安全
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
|
2月前
|
开发框架 移动开发 前端开发
【Uniapp 专栏】Uniapp 与 React Native 的对比分析
【5月更文挑战第14天】Uniapp和React Native是热门的跨平台移动开发框架。Uniapp以其一套代码多端运行、丰富的组件生态和较低的学习曲线受到青睐,适合快速开发简单应用。React Native基于React,拥有活跃社区和优秀性能,适合复杂应用。React Native在性能上略胜一筹,尤其在需要接近原生体验的场景。Uniapp的官方组件弥补了社区资源不足。选择时需考虑开发效率、性能需求、团队技术栈和社区支持。
【Uniapp 专栏】Uniapp 与 React Native 的对比分析
|
9天前
|
Java 数据安全/隐私保护
AES加密工具类(java)
AES加密工具类(java)
43 0
|
1月前
|
前端开发 iOS开发 Android开发
React Native跨平台开发实战:从零到一
学习React Native跨平台开发,首先安装Node.js和React Native CLI,设置Android/iOS环境。使用CLI创建项目,如`npx react-native init MyProject`。运行应用:`npx react-native run-android`或`run-ios`。编写组件,如在App.js中创建Hello World。添加样式,安装第三方库如react-native-vector-icons,使用react-navigation进行路由和导航。
27 2
|
13天前
|
Dart 前端开发 JavaScript
探索移动应用开发中的跨平台解决方案:Flutter与React Native的比较
在移动应用开发领域,选择合适的跨平台解决方案是关键。本文将深入分析Flutter和React Native这两大主流框架,从性能、开发效率、社区支持等方面进行比较,帮助开发者做出明智的选择。
22 0