先来看一个搜索结果:

RSA算法本质上是基于数学【对极大整数做因数分解的难度】的原理,so 密文本质上是一堆有规则的数字经过编码和【填充】的结果。

原文和加密密钥相同,在java环境,默认Padding模式下每次生成的密文是相同的;而密钥加密后密文不一致,这个和RSA的填充(Padding)模式有关。

为什么使用Padding?

严格地说RSA也是一种“块”加密/解密。加密前输入长度必须与“模”相同:不足需要补足(Padding);输入长度大于“模”长度,则需要“分组”,最后一组同样需要Padding。

RSA加密常用的填充模式

RSA_PKCS1_PADDING, RSA_PKCS1_OAEP_PADDING, RSA_NO_PADDING。

最优非对称填充(OAEP)就是一种优秀的填充方式,一般用于银行交易中数据;

这里的密文每次加密不一样使用的亦是OAEP填充模式,而jdk自带的库由于软件出口限制的原因并不自带这些算法,可以使用 BouncyCastleProvider 补充。

以下是相关代码

package com.test;import com.example.lib.aes.Base64;import org.bouncycastle.jce.provider.BouncyCastleProvider;import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;
import java.security.spec.PKCS8EncodedKeySpec;import javax.crypto.Cipher;/*** Author:JsonLu* DateTime:2018/7/31 上午9:39* Email:jsonlu@qq.com* Desc:**/
public class Rd {static {if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {System.out.println("security provider BC not found");Security.addProvider(new BouncyCastleProvider());}}/*** 公钥解密** @param content* @param pubKey* @return*/public static String decrypt(String content, String pubKey) {PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decode(pubKey, Base64.DEFAULT));try {KeyFactory keyf = KeyFactory.getInstance("RSA");PublicKey publicKey = keyf.generatePublic(keySpec);Cipher cipher = Cipher.getInstance("RSA/NONE/OAEPPadding");cipher.init(Cipher.DECRYPT_MODE, publicKey);byte[] inputByte = Base64.decode(content, Base64.NO_WRAP);inputByte = cipher.doFinal(inputByte);return new String(inputByte);} catch (Exception e) {e.printStackTrace();return null;}}/*** 私钥加密** @param content* @param priKey* @return*/public static String encrypt(String content, String priKey) {PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decode(priKey, Base64.DEFAULT));try {KeyFactory keyf = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyf.generatePrivate(keySpec);Cipher cipher = Cipher.getInstance("RSA/NONE/OAEPPadding");cipher.init(Cipher.ENCRYPT_MODE, privateKey);byte[] inputByte = content.getBytes();inputByte = cipher.doFinal(inputByte);return Base64.encodeToString(inputByte, Base64.NO_WRAP);} catch (Exception e) {e.printStackTrace();return null;}}}

aes密文长度_RSA加密密文可变(一句话说明)相关推荐

  1. aes key长度_AES加密(1): 基本AES算法

    简介 AES原本指的是一套标准FIPS 197,而AES算法一般指分组大小为128bits的Rijndeal算法,由比利时学者Joan Daemen和Vincent Rijmen提出. AES与Rij ...

  2. java中aes明文长度_AES密文与明文长度的关系

    AES介绍 严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128位,密钥长度则 ...

  3. openssl 测试加密卡_OpenSSL自带的aes_128_ecb加密函数——密文长度测试

    OpenSSL自带的aes_128_ecb加密函数--密文长度测试 发表于2017年11月29日 阅读人数(3608) 近来要用到对称加密,就是使用了openssl的库给文件加密,选择的128位的分块 ...

  4. vue springboot 密文(密码加密)请求

    vue springboot 密文(密码加密)请求 前端 代码 调用 后端 代码 调用 前端 代码 1.安装 npm install crypto-js (cnpm install crypto-js ...

  5. RSA 密钥 明文 密文 长度介绍

    提到密钥,我们不得不提到RSA的三个重要大数:公钥指数e.私钥指数d和模值n.这三个大数是我们使用RSA时需要直接接触的,理解了本文的基础概念,即使未接触过RSA的开发人员也能应对自如的使用RSA相关 ...

  6. RSA密钥长度、明文长度和密文长度

    RSA密钥长度.明文长度和密文长度 本文整理RSA加解密中必须考虑到的密钥长度.明文长度和密文长度问题知识,对第一次接触RSA的开发人员来说,RSA算是比较复杂的算法,以后还会补充几篇RSA基础知识专 ...

  7. AES与RSA混合加密完整实例

    前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门:https://blog.csdn.net/ityouknow/article/details/80603617),文中讲到利用RSA来 ...

  8. java发送加密报文_RSA加密---从后台到客户端实现报文加解密

    RSA是当前最流行的非对称加密方式,使用公钥加密使用密钥解密,如何妥善的保管密钥就成了关键. 动态生成密钥 工具类 package com.yitong.utils; import java.secu ...

  9. aes 加密_结合RSA与AES实现前后端加密通信

    结合RSA与AES实现前后端加密通信 一.思路 使用RSA秘钥生成工具生成一对公钥(A)和私钥(B),前端保留A,后端保留B. 前端发送数据时,先生成一串随机16位字符串作为AES的秘钥(C),然后使 ...

最新文章

  1. SLAM/检测跟踪/多传感器融合方向实习生招聘 | 腾讯Robotics X实验室
  2. maven将xml文件一起打包
  3. Net编程 详解DataTable用法【转】
  4. [USACO 08JAN]Haybale Guessing
  5. SQL错误提示档案(3):SQL Server连接中的四个最常见错误
  6. 搜索推荐系统实战:起始篇
  7. win10下安装PHP_CodeSniffer 检查编码规范
  8. SNF开发平台WinForm之五-高级查询使用说明-SNF快速开发平台3.3-Spring.Net.Framework
  9. sqlserver——视图
  10. 信息学奥赛一本通(1215:迷宫)
  11. Python第七章-面向对象高级
  12. python小课文件_[Python]小甲鱼Python视频第030课(文件系统:介绍一个高大上的东西)课后题及参考解答...
  13. windows下release模式调试某行代码无法中断
  14. linux如何生成awr报告,手工生成AWR报告方法记录
  15. 如何获取QQ邮箱授权码
  16. PHP叫号系统,排队叫号系统
  17. AWS——API Gateway
  18. 网络信号浪涌防雷器的应用
  19. 卡巴斯基在桌面窗口管理器中发现零日漏洞
  20. windows10罪过_七大罪过与如何避免

热门文章

  1. POI导出EXCEL设置高度和宽度
  2. new String(123) 创建了几个对象?
  3. oracle导入中文数据出现乱码
  4. 关于Loadrunner 错误解决
  5. 西电继续教育计算机试题答案,西安电子科技大学网络与继续教育学院微机原理试题...
  6. 启动马达接线实物图_星三角降压启动电路图实物接线图
  7. php sslbug,PHP错误抑制符(@)导致引用传参失败Bug的分析
  8. nginx 反向proxy多个 tomcat,负载均衡
  9. 讨论ALL_ROWS模式和FIRST_ROWS模式
  10. python-if条件判断与while/for循环