Android RSA 加解密

文章目录

  • 一、RSA简介
  • 二、RSA 原理介绍
  • 三、RSA 秘钥对生成
    • 1. 密钥对生成
    • 2. 获取公钥
    • 3. 获取私钥
  • 四、PublicKey 和PrivateKey 的保存
    • 1. 获取公钥十六进制字符串
    • 1. 获取私钥十六进制字符串
  • 五、PublicKey 和 PrivateKey 加载
    • 1. 加载公钥
    • 2. 加载私钥
  • 六、 RSA加解密
    • 1. RSA 支持三种加密方式
    • 2.RSA加密
    • 3. RSA解密
  • 七、实例代码

一、RSA简介

RSA是一种常用的非对称加密算法,所谓非对称加密是指使用一对密钥(公钥和私钥)进行加密和解密,公钥人人都可以获得,用于加密数据,私钥保存在服务器中,用于解密数据。加密解密过程如下:

在这里插入图片描述
使用RSA进行加密解密,其优点是非常不容易破解,缺点是和对称加密(如AES)相比,加密速度较慢。因此,实际使用中,常常将对称加密和非对称加密结合使用,即使用非对称加密协商对称加密的密钥,使用对称加密密钥加密传输内容。

二、RSA 原理介绍

RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困 难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有

三、RSA 秘钥对生成

1. 密钥对生成

 private static KeyPair genKeyPair() {try {KeyPairGenerator keyPairGen = null;keyPairGen = KeyPairGenerator.getInstance("RSA");keyPairGen.initialize(2048, new SecureRandom());return keyPairGen.generateKeyPair();} catch (Exception e) {e.printStackTrace();}return null;}

2. 获取公钥

 public static PublicKey getPublicKey(KeyPair keyPair){return  keyPair.getPublic();}

3. 获取私钥

 public static PrivateKey getPrivateKey(KeyPair keyPair){return  keyPair.getPrivate();}

四、PublicKey 和PrivateKey 的保存

1. 获取公钥十六进制字符串

  public static  String getHexStrPublicKey(PublicKey publicKey){byte[] publicKeyEncoded = publicKey.getEncoded();return  ConvectionUtils.byte2HexStr(publicKeyEncoded);}

1. 获取私钥十六进制字符串

public static  String getHexStrPrivateKey(PrivateKey privateKey){byte[] privateKeyEncoded = privateKey.getEncoded();return  ConvectionUtils.byte2HexStr(privateKeyEncoded);
}

五、PublicKey 和 PrivateKey 加载

1. 加载公钥

  public static PublicKey loadPublicKey(String publicKeyStr) throws Exception {try {byte[] buffer = ConvectionUtils.hexStr2Bytes(publicKeyStr);KeyFactory keyFactory = KeyFactory.getInstance("RSA");X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);return keyFactory.generatePublic(keySpec);} catch (Exception e) {e.printStackTrace();}return null;}

2. 加载私钥

    public static PrivateKey loadPrivateKey(String privateKeyStr) throws Exception {try {byte[] buffer =ConvectionUtils.hexStr2Bytes(privateKeyStr);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer);KeyFactory keyFactory = KeyFactory.getInstance("RSA");return keyFactory.generatePrivate(keySpec);} catch (Exception e) {e.printStackTrace();}return null;}

六、 RSA加解密

1. RSA 支持三种加密方式

  • RSA/ECB/PKCS1Padding (1024, 2048)
  • RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
  • RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)

2.RSA加密

 public static byte[] encrypt(PublicKey publicKey, byte[] plainTextData)  {if (publicKey == null || plainTextData == null) {return null;}Cipher cipher;try {cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");cipher.init(Cipher.ENCRYPT_MODE, publicKey);return cipher.doFinal(plainTextData);} catch (Exception e) {e.printStackTrace();}return null;}

3. RSA解密

public static byte[] decrypt(RSAPrivateKey privateKey, byte[] cipherData)  {if (privateKey == null || cipherData == null) {return null;}Cipher cipher = null;try {cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");cipher.init(Cipher.DECRYPT_MODE, privateKey);return cipher.doFinal(cipherData);} catch (Exception e) {e.printStackTrace();}return null;} 

RSA在线加密解密

七、实例代码

AndroidEncryption

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTF-Web习题:2019强网杯 UPLOAD

题目链接:2019强网杯 UPLOAD 解题思路 打开靶场如下图所示,是一个注册和登录界面 那就注册登录一下,发现是一个提交头像的页面: 试了一下只有能正确显示的png图片才能提交成功,同时F12拿到cookie,base6…

树形背包问题

一些题目给定了树形结构,在这个树形结构中选取一定数量的点或边(也可能是其他属性),使得某种与点权或者边权相关的花费最大或者最小。解决这类问题,一般要考虑使用树上背包。 树上背包,顾名思义&#xff0c…

Linux 基础开发工具 : Vim编辑器

Vim 是 Linux 和其他类 Unix 系统上广泛使用的文本编辑器之一。它基于更早的 vi 编辑器,但添加了许多增强功能和扩展。Vim 是“Vi IMproved”的缩写,意为“改进的 Vi”,我们常使用Vim编辑器编写c/c代码。 ps:该篇介绍均为最基础介…

Blender中保存透明图片

在Blender中保存透明图片,主要是通过在渲染设置中调整背景透明度,并选择合适的文件格式来保存图像。以下是一个详细的步骤指南: 一、设置渲染属性 打开Blender并加载你想要渲染的模型。在右侧的属性编辑器中,找到并点击“渲染属…

解决Visual studio内报错信息:MSB8036:找不到 Windows SDK 版本问题

问题描述: 找不到WindowsSDK版本,请安装所需版本的Windows SDK,或者在项目属性页中通过右键单击解决方案并选择“重定解决方案目标”来更改SDK版本。 首先,如果你尝试了以下两种方法: (1)重新…

【Qt】 FFmpeg+Qt windows 32位或者64位环境搭建

简介 目前Ffmpeg官网(64位连接)下载的均为64位编译的,这要求我们采用的Qt creator也采用64位编译器。但是仍存在部分用户采用32位编译器,所以这部分用户需下载32 Ffmpeg(32位连接)。 根据使用的编译器位数…

Linux下安装Redis(超简单)

1.下载 选着自己需要下载的版本后,右击选择复制链接,然后利用命令进行下载,进入Xshell控制台,输入wget将复制的链接粘帖上,这里我选择的是6.0.6版本。 命令如下: wget https://download.redis.io…

7款主流大模型实测:简单的数感测试全翻车

实测strawberry中有2个字母“r”?不会比大小的大模型也几乎数不对数,数理能力差到惊人! 科技新知 原创 谁能想到,号称“超级大脑”的大模型,竟然在几道简单的数学题上败给了小学生。 近日,国内火热的音乐…

Vue.js 2 项目实战(三):综合案例-小黑记事本

前言 Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。它的设计目标是通过采用易于上手的结构和强大的功能,使前端开发变得更加简便和高效。以下是 Vue.js 的一些关键特性和优点: 核心特性 声明式渲染 Vue.js 使用声明式语法来描述用户界面&a…

HR怎么看待PMP证书呢?

不是HR,但 HR 的招人标准也是根据市场跟岗位需求来的吧。据我了解,PMP 证书目前还是有市场的,大家可以根据自己的行业跟公司,去判断下 PMP 的含金量,看自己是否需要去考。一定要结合自己的需求分析,盲目跟风…

【QT】定时器事件 - QTimerEvent QTimer

qt 系统 - 定时器 定时器1. QTimerEvent2. QTimer3. 获取系统日期及时间 定时器 Qt 中在进行窗口程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使用定时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执…

EXO项目解析:pynvml怎么实现监控的,包括什么参数

目录 pynvml怎么实现监控的,包括什么参数 pynvml实现监控的方式 pynvml包括的主要参数 GPU功耗的组成 举例说明 注意事项 EXO项目解析:https://github.com/exo-explore/exo?tab=readme-ov-file 这段代码是一个使用setuptools库编写的Python包安装脚本,主要用于定义和…

GIT命令学习 一

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…

【Git】(基础篇六)—— 发现好项目

发现github上的好项目 在开源社区中,发现好的项目,不论是对于自己的学习,还是在前人的基础上继续改进,都十分重要,本文为你介绍如何在github上面找到好的项目(gitee同理) 关注活跃大牛 GitHu…

ARM架构(二)—— arm v7-a/v8/v9寄存器介绍

1、ARM v7-A寄存器 1.1 通用寄存器 V7 V8开始 FIQ个IRQ优先级一样, 通用寄存器:31个 1.2 程序状态寄存器 CPSR是程序状态毒存器,保存条件标志位,中断禁止位,当前处理器模式等控制和状态位。每种异常模式下还存在SPS…

实现接口幂等性的8种解决方案

古语云:“一而再,再而三,其效不二” 俗语讲:被虐千百遍,依然如初恋 数学符号:f(f(f(x))) f(x) 即无论操作执行一次还是多次,其效果始终如一,不会有差异。这就是幂等性。 文章导读 什…

FPGA-PLL IP核的使用

1.前言 IP核是使用FPGA进行快速开发的一大法宝,FPGA有几个常用的IP核,如今天要写的PLL,即锁相环,还有FIFO,ROM等。熟练使用这些IP核,在一一些大型的项目中会省很多的精力,今天就通过一个实例来…

55 、mysql的存储引擎、备份恢复以及日志备份、恢复

一、数据库的存储引擎: 1.1、存储引擎的概念 概念:存储引擎,就是一种数据库存储数据的机制,索引的机制,索引的技巧,锁定水平。 存储的方式和存储的格式。 存储引擎也属于mysql当中的组件,实…

Linux挂载磁盘目录

一、背景 由于安装oracle数据库,磁盘空间不足,已经加了存储,但是没有挂载,需要将/dev/sdb全部挂载到/oracle目录下 [rootdatabase-001 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk …

HTTPServer改进思路2(mudou库核心思想融入)

mudou网络库思想理解 Reactor与多线程 服务器构建过程中,不仅仅使用一个Reactor,而是使用多个Reactor,每个Reactor执行自己专属的任务,从而提高响应效率。 首先Reactor是一种事件驱动处理模式,其主要通过IO多路复用…