react native rsa

背景:最近在学习react native ,由于目前已经发布的app(ios、安卓)有rsa加密的地方,所以 就尝试用 RN 实现下,加解密流程是  服务端生成 公、私钥,然后存储私钥,给前端发送公钥,前端用公钥加密后将数据传给服务端,服务端解密。此文就不说如何解密了。

所用的rsa库  我是直接将git上的库(如图1 的三个文件)放到我的RN项目文件里。

图1

首先下载  buffer  包,此包功能很强大感兴趣的可以多了解了解。先用终端进入到RN 项目的根目录下,然后敲入

命令  npm install buffer --save  

在此说明下  --save  是为了在自己项目主目录下的package.json里能看到自己依赖的包。如图( package.json 的截图 ):红色框里的buffer就是下载的。另外‘react’ 和‘react-native’ 是项目init时自带的 ( 如何init一个新的项目参考 图2,图片截取自 react中文网-搭建开发环境) 。其余没用红框框的,无需关注。项目中rsa并没用到(是尝试其他rsa 加解密时下载的依赖库)。

buffer 下载后,会在 node_modules 目录里。


package.json 的截图


图2

代码之前先说下rsa。

1、我们要坚信的认为rsa的加密算法一定是一致的。  以此,我们找库的关于加解密的算法部分一定是没问题的,不管什么平台的,什么语言的。(前提,这个库只要有人成功过)

2、即使同一个公钥,明文相同,加密后的密文也不相同,(这个地方让我白白浪费了大半天时间),至于什么原因不同,有兴趣的可以google了解下。

3、rsa 加密有两中,一种是根据modulus,一种根据publickey。本文说的是根据modulus,publickey 也有对应的库,在此就不说了。推荐个库 node-rsa  我没试过,不知道是否可以。

4、modulus 会通过计算生成 公钥,这里有个有个bignum的概念。jsbn.js  文件里可以看到。而用publickey 话,直接使用即可。

闲话少说,上代码。

import RSAKey from './Utils/RSA/rsa1/rsa'

import {Buffer} from 'buffer'

RSAKey 的引用,根据它的目录结构来。 根目录-Utils-RSA-rsa1   如图3   RN3 就是该项目的根目录。 这里目录引用,主要给初学者强调下,如果已经了解可以忽略。

buffer 上面已经提到,装在了node_modules目录里,所以这样引用就行。


图3

接着下面的代码

// 服务器返回的 modulus 串

let modulusKey1 = 'AICUXv5CXjBmz09IeybFBxNjd0jrqWN/d08mv5UvbAoYEzdDisP+C4C2oAMk9VB3hY9BBswu9efv72UayDpCL7e9RVs0WZ7ghp7rNxDjk99rcDP8K537iqDaLRTcFXPKvgXKnxlrz7AOJblVVfmf68sZDd9JEQvLsCwaJFOYkj/X';

// buffer的创建,这里说下,由于我们服务器返回的是base64,所以buffer的第二个参数就是 ‘base64’,具体用法可以参考 buffer  api

let modulusKey2 = new Buffer(modulusKey1, 'base64');

// 这一步是将服务器返回的数据转成hex,为什么要这么做呢,因为我们用的rsa库的参数是hex格式, 这个 rsa.js 源码里有提到,或者  __tests__  文件夹里的index.spec.js 的事例也提到了(第5、6行),事例里的publicKey 就是我说的modulus,只是作者起的变量名叫publicKey。

let modulusKey3 = modulusKey2.toString('hex');

// 准备好参数对象,这里提下,n  和  e 是与rsa modulus 方式必须的参数。如果你看到 其他平台有提到 ‘AQAB’ 和这里的  ‘10001’ 是一样的。你可以尝试将AQAB转成hex格式看看。

let ConsultPublicKey = {n:modulusKey3,e:'10001'};

// 加密的明文

let randomKey = 'aaabbbcccdddeeefffggghhh';

// 创建rsa加、解密对象

let rsaPublicKey = new RSAKey();

// 设置秘钥,这注意下,需要将ConsultPublicKey 对象转成json字符串,因为setPublicString参数类型是json字符串。

rsaPublicKey.setPublicString(JSON.stringify(ConsultPublicKey));

// 进行加密操作

let randomKeyRsa = rsaPublicKey.encrypt(randomKey);

// 将加密后的数据 创建buffer,   encrypt方法的返回值就hex格式的

let tempBuffer = new Buffer(randomKeyRsa,'hex');

// 将数据转成base64

let tempBuffer3= tempBuffer.toString('base64');

// 注释: tempBuffer3  就是服务端要的加密数据了。



我们看下服务端的代码。由于服务端不是我开发的,库什么的也不清楚,但是还是那句话,rsa 加密的库的算法什么的一定都是统一的。所以你找个有人成功过的库就Ok了。这里我只贴个给前端传的数据处理部分的代码。 如图4


图4

以上是代码部分。

希望以上部分对你有帮助,如有什么问题,留言联系。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • /**ios常见的几种加密方法: 普通的加密方法是讲密码进行加密后保存到用户偏好设置( [NSUserDefaul...
    彬至睢阳阅读 2,883评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 军校时爱情是偷偷传递的纸条浓情蜜意如醉如痴 毕业后爱情是厚厚的牛皮纸信封一种闲愁两地相思 结婚后爱情是一张红红的结...
    成都独行侠阅读 547评论 0 7
  • 生活中从不缺少美,而是缺少发现美的眼睛——罗丹 当人生处于灰暗的时候,或许一个陌生人的出现就能够改变你的一生(思想...
    萌趣牛历险记阅读 600评论 3 5
  • 兔夫人阅读 283评论 2 1