安卓逆向学习之RSA加密算法

安卓逆向学习之RSA加密算法

RAS 算法简介

它是又罗纳德.李维斯特、阿迪.萨莫尔和伦纳德.阿德曼在 1977 年提出,当时他们三人在麻省理工学院工作,RSA 就是他们三大姓开头字母拼在一起组成的。

RSA 是最流行的非对称加密算法之一,也被称之为公钥加密。

特点

最流行的非对称加密算法之一(也就是说用来加密的密钥和用来解密的密钥不是同一个),和 DES 一样的,RSA 也是分组加密算法,不同的是分组大小可以根据密钥的大小可以根据密钥的大小而改变,如果加密的数据不是分组大小的整数倍,那么根据具体的应用方式增加额外的填充位。
RSA 作为一种非对称的加密算法,其中很重要的一个特点就是,当数据在网络中传输时,用来加密数据的密钥并不需要和数据一起传送,因此这就减少了密钥泄露的可能性。

RSA 在不允许加密的时候也是非常有用的。

加密的一方使用一个密钥,称为公钥,解密的一方使用另一个密钥,称为私钥,私钥需要保持其私有性

RSA 被认为是非常安全的,不过其计算速度要比 DES 慢的多,同 DES 一样其安全性也从未被证明过。
(要想攻破 RSA 算法涉及的大数的因子分解是一个极其困难的问题,由于缺乏解决大数因子分解的有效方法,因此可以推断出,目前没有有效的办法可以破解RSA)

RSA 算法原理

从基本上来说加密和解密数据都是围绕着模幂运算,这是取模计算中的一种,取模计算是整数计算中的一种常见形式。
如:
40mod 13=1 因为 40/13=3,而余数为 1 模幂运算就是计算 ab mod n 的过程

$$
a \cdot b \div n
$$

在 eclipse 中分析 RSA 算法的代码

我们在 eclipse 中已经准备好这个工程,我们直接在 mainactivity 分析这几个重要的方法。

过程

第一个是一个私钥加密,然后是一个公钥解密,然后是应该公钥加密,又是一个私钥解密。

在这里插入图片描述

我们去 RSA 中去分析一下这几种方法,我们从上往下看。

encrypt

首先是密钥长度的定义

在这里插入图片描述

然后是一个初始化密钥,我们去看一下这个逻辑,首先我们实例化密钥生成,然后初始化密钥生成器,紧接着生成密钥对,分别是公钥,私钥然后将密钥对存储在 map 中。

接下来我们取的私钥

在这里插入图片描述

然后取的公钥

在这里插入图片描述

然后对私钥进行加密

在这里插入图片描述

这里我们首先要取的私钥,对私钥进行一个处理,紧接着对数据进行一个加密,在网下是一个公钥加密。

在这里插入图片描述

decrypt

跟上面一样我们首先取的公钥,然后对公钥进行一个处理,生成一个公钥对象,然后进行一个操作。

在这里插入图片描述

在往下是一个公钥加密。

在这里插入图片描述

一个私钥解密。

在这里插入图片描述

这个逻辑其实方法里面都差不多,我们最主要重点关注的是下面这几个方法。

分析 RSA 类

1
2
3
4
5
6
7
generateKeyPair:生成密钥对
getPublic:获取公钥
getPrivate:获取私钥
PKCS8EncodedKeySpec:根据定制的编码密钥创建一个新的PKCS8EncodedKeySpec
KeyFactory:密钥工厂用于将密钥(Key类型的不透明加密密钥)
转换成密钥规范(底层密钥材料的透明表示)
generarePublic:根据提供的密钥规范(密钥材料)生成公钥对象
作者

Codecat

发布于

2022-06-13

更新于

2022-06-24

许可协议

评论