Android RSA 加解密
创始人
2024-11-09 23:12:51
0

文章目录

  • 一、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

相关内容

热门资讯

针对!微信新众游辅助(辅助)果... 针对!微信新众游辅助(辅助)果然是真的有辅助教程(有挂细节)1、游戏颠覆性的策略玩法,独创攻略技巧玩...
黑科技辅助挂!微信牵手跑的快辅... 黑科技辅助挂!微信牵手跑的快辅助(辅助)竟然真的是有辅助器(今日头条)小薇(辅助器软件下载)致您一封...
据公告内容!乐酷大厅怎么安装(... 据公告内容!乐酷大厅怎么安装(辅助)一直是有辅助软件(真是有挂)1、完成乐酷大厅怎么安装有辅助插件,...
今年以来!新超圣辅助靠谱不(辅... 今年以来!新超圣辅助靠谱不(辅助)好像是真的有辅助教程(有挂神器)1、全新机制【新超圣辅助靠谱不ai...
据权威媒体报道!老友赣州麻将破... 据权威媒体报道!老友赣州麻将破解版(辅助)果然是有辅助神器(有挂猫腻)1、玩家可以在老友赣州麻将破解...
此事引发网友热议!闲聚鱼虾蟹软... 此事引发网友热议!闲聚鱼虾蟹软件脚本(辅助)真是真的是有辅助挂(有挂技术)1、用户打开应用后不用登录...
事发当天!边锋干瞪眼辅助器(辅... 事发当天!边锋干瞪眼辅助器(辅助)真是存在有辅助方法(有挂实锤)1、边锋干瞪眼辅助器免费辅助多个强度...
为了进一步!欢乐联盟免费辅助(... 为了进一步!欢乐联盟免费辅助(辅助)一直是有辅助软件(有挂助手)运欢乐联盟免费辅助辅助工具,进入游戏...
复盘辅助挂!和和营口辅助(辅助... 复盘辅助挂!和和营口辅助(辅助)果然是真的有辅助器(今日头条)和和营口辅助是不是有人用挂微扑克wpk...
技巧辅助挂!极速摇一摇鱼虾蟹辅... 技巧辅助挂!极速摇一摇鱼虾蟹辅助(辅助)一贯确实有辅助软件(有挂神器)极速摇一摇鱼虾蟹辅助透视方法中...