1.android 端加密方式

  • 非对称加密 (RSA)
  • 对称加密 (DES,AES,3DES)
  • MD5加密
  • BASE64编码

ps:这篇主要介绍android rsa加密

2.Rsa加密原理

1.随机选择两个大质数p和q,p不等于q,计算N=pq;

2.选择一个大于1小于N的自然数e,e必须与(p-1)(q-1)互素。

3.用公式计算出d:d×e = 1 (mod (p-1)(q-1)) 。

4.销毁p和q。

最终得到的N和e就是“公钥”,d就是“私钥”,发送方使用N去加密数据,接收方只有使用d才能解开数据内容。

3.Rsa相比对称加密算法优缺点

优点:

  • 对称加密比对称加密算法更安全

缺点:

  • 加密速度更慢,适用于加密少量数据

4.示例 (公钥加密,私钥解密)

通过公钥字符串 获取PublicKey对象

            byte[] buffer = Base64Utils.decode(publicKeyStr);KeyFactory keyFactory = KeyFactory.getInstance("RSA");X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);RSAPublicKey publicKey =  (RSAPublicKey) RSAPublicKey.generatePublic(keySpec);
复制代码

使用publickey加密数据

            Cipher cipher = Cipher.getInstance("转换");// 编码前设定编码方式及密钥cipher.init(Cipher.ENCRYPT_MODE, publicKey);// 传入编码数据并返回编码结果byte[] encrptData = cipher.doFinal(data);
复制代码

几个关键参数介绍:

1.转换 是一个字符串,它描述为产生某种输出而在给定的输入上执行的操作(或一组操作); 形式可以是 算法/模式/填充算法; 常见的模式如下:

RSA (如果你的明文不够128字节加密的时候会在你的明文前面,前向的填充零。解密后的明文也会包括前面填充的零,这是服务器需要注意把解密后的字段前向填充的零去掉,才是真正之前加密的明文。)

RSA/ECB/PKCS1Padding (加密的时候会在你的明文中随机填充一些数据,所以会导致对同样的明文每次加密后的结果都不一样)

RSA/None/PKCS1Padding

第一个 RSA 等价于 RSA/None/NoPadding .使用此模式加密后 同一个明文、同一个公钥每次生成同一个密文.攻击者能够据此识别到同一个信息都是何时被发送。 所以一般使用第二个 RSA/ECB/PKCS1Padding .

2.编码方式设定

cipher.init(MODE, publicKey);

常见编码方式 (MODE):

ENCRYPT_MODE: Cipher 初始化为加密模式的常量 (常用)

DECRYPT_MODE: Cipher 初始化为解密模式的常量 (常用)

WRAP_MODE :Cipher 初始化为密钥包装模式的常量

UNWRAP_MODE :Cipher 初始化为密钥解包模式的常量

PUBLIC_KEY :解包的密钥为“公钥”的常量

PRIVATE_KEY : 解包的密钥为“私钥”的常量

SECRET_KEY :解包的密钥为“秘密密钥”的常量

5.开发过程中容易遇到的坑

1.客户端需要与后端确认好使用同一转换模式 做到一一对应. 如果后端(java使用 RSA),则前端 需要使用(RSA/ECB/PKCS1Padding) 而不是 RSA.

2.前端请求下来的公钥字符串如果 包含 "-----BEGIN PUBLIC KEY-----" 和 "-----END PUBLIC KEY-----",需要将其切掉,如果直接使用 会报 InvalidKeySpecException .

转载自:https://juejin.im/post/5be103685188255e9b617dd7

RSA详解 ----- Android中常用的非对称加密算法相关推荐

  1. 计算机中常用软件列表,详解win10中常用软件列表不要在任务栏显示的方法

    我们在win10系统的使用中,在win10的界面中我们经常使用软件在电脑任务栏中会在电脑中显示,那很多的小伙伴在电脑中是不想要显示的遇到这个问题我们怎么取消这个常用的软件在任务栏一直显示的情况呢,今天 ...

  2. okhttp post php,Android_详解Android中使用OkHttp发送HTTP的post请求的方法,HTTP POST 和 PUT 请求可以包含要 - phpStudy...

    详解Android中使用OkHttp发送HTTP的post请求的方法 HTTP POST 和 PUT 请求可以包含要提交的内容.只需要在创建 Request 对象时,通过 post 和 put 方法来 ...

  3. 详解Android中AsyncTask的使用

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...

  4. 详解Android中玩转高德地图

    在上一篇博客上,和大家分享了如何在Android中集成高德定位以及定位的基本使用.今天我们就来看看高德地图在Android中如何使用吧. 同样,我将本篇博客的内容分为如下部分: (1)添加高德SDK ...

  5. android notification的使用方法,详解Android中Notification的使用方法

    在消息通知的时候,我们经常用到两个控件Notification和Toast.特别是重要的和需要长时间显示的信息,用Notification最合适不过了.他可以在顶部显示一个图标以标示有了新的通知,当我 ...

  6. 详解Android中获取SD卡和内存的空间信息

    在Android中如何获取SDCard和手机内存的总空间和可用空间等信息. 创建一个新的Android工程,工程名字为<获取存储空间大小>,包名为:com.connect.storageS ...

  7. 安卓增删改查用sql语句号码_详解Android中一些SQLite的增删改查操作

    在Android开发中经常要涉及到对数据的操作.Android本身提供了四种数据存储方式.包括:SharePreference,SQLite,Content Provider,File. 在Andro ...

  8. android安装apk时启动一个服务器,详解Android中App的启动界面Splash的编写方法

    一.Splash界面的作用用来展现产品的Logo 应用程序初始化的操作 检查应用程序的版本 检查当前应用程序是否合法注册 二.界面的xml定义写一个布局背景设置为产品的logo图片,再添加一个text ...

  9. android编程fragment,详解Android中Fragment的两种创建方式

    onCreate():在创建fragment时系统会调用此方法.在实现代码中,你可以初始化想要在fragment中保持的那些必要组件,当fragment处于暂停或者停止状态之后可重新启用它们. onC ...

  10. java toast_详解Android中的Toast源码

    Toast源码实现 Toast入口    我们在应用中使用Toast提示的时候,一般都是一行简单的代码调用,如下所示: [java] view plaincopyprint?在CODE上查看代码片派生 ...

最新文章

  1. Linux那些事儿 之 戏说USB(32)驱动的生命线(四)
  2. gevent queue应用2 队列设置了最大数量限制
  3. 嵌入式Linux操作系统学习规划,学习嵌入式开发需要哪些知识?
  4. linux普通文件的特点是,linux系统文件系统上有哪些特点
  5. dplayer js控制 自动全屏_vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】...
  6. Java读写二维数组到文件
  7. NLP领域中更有效的迁移学习方法
  8. Python 文件读写操作-Python零基础入门教程
  9. 中国互联网络发展状况统计报告
  10. 谷歌正在为Chromebook自研基于Arm的处理器
  11. Understand Java hasCode() method
  12. GD32F103使用串口DMA收+发 信息(无中断)
  13. 中国文化和旅游部长:肯定《吴哥王朝》培养本地演员
  14. Windwos cwRsync 服务端及客户端安装配置全攻略
  15. 转 适合wince初学者的一些 知识
  16. 【华为云-IP资源冻结机制】华为云安全事故冻结服务器IP近1小时【50分钟系统全线不可用】
  17. vue样式操作与事件绑定
  18. 在深信服实习是怎样的体验(研发测试岗)
  19. linux中 在文件中写入一句话怎么写_Linux一句话命令
  20. 如何确定试管婴儿胚胎质量

热门文章

  1. 77个提升自我的网站
  2. TXTReader功能之一:HotKey
  3. 股票走势图php源码下载,flex实现股票行情走势图示例代码
  4. Pygame推箱子2021:经典版推箱子小游戏,一起回味童年经典掌机游戏~
  5. 回望2022,依然值得仰望星空
  6. 我们是龙的传人还是狼的传人? 《狼图腾》--- 绝对值得一读的书
  7. 利用简单Json处理实现企业微信后台“客户朋友圈”统计导出
  8. c语言memcmp函数详解,C语言之memcmp()函数
  9. jxl 冻结单元格_如何在Word中冻结表格中单元格的大小
  10. Android 视频播放器