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

v2-c080232c6a3e08e4828623efc69f7d00_1440w.jpg?source=172ae18b

先来看一个搜索结果:

v2-f23b7446c1946c5a63085b95eb32832a_b.jpg

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;}}}

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

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

相关文章

网络分析之networkx(转载)

图的类型 Graph类是无向图的基类,无向图能有自己的属性或参数,不包含重边,允许有回路,节点可以是任何hash的python对象,节点和边可以保存key/value属性对。该类的构造函数为Graph(dataNone,**attr)&#xf…

ubuntu 14 java web服务器搭建

前言 前段时间,在阿里云买了台云服务器,30多块,然后部署了一个tomcatmysqlredissvn的运行环境,下面是一些整理。 连接到远程服务器 使用ssh登陆工具,比如scure CRT,以下的命令都是指在scure CRT下输入 …

sqlite管理工具_Liquibase 数据库版本管理工具:1.安装

1.Liquibase 是什么粘一段官方的解释Track, version, and deploy database changes跟踪、管理和应用数据库变化说白了,就是一个将你的数据库脚本转化为xml格式保存起来。其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回…

BZOJ2720: [Violet 5]列队春游

2720: [Violet 5]列队春游 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 173 Solved: 125[Submit][Status][Discuss]Description Input Output Sample Input Sample Output HINT 题解:对于这种题目我只能呵呵一笑欺负我是单身汪,哎! 一、…

win7下卸载linux系统(不用windows光盘)

前言 安装win7Linux双系统后,不想用了,该怎么卸载呢?其实,只要删除Linux分区即可删除掉Linux,但是,为了防止启动进不了windows,还是要更新一下主引导记录。 步骤一:使用MbrFix工具…

python 文本处理库_推荐8种目前Python使用率最高的文本处理工具

前言 文本处理一般包括词性标注,句法分析,关键词提取,文本分类,情感分析等等,这是针对中 文的,如果是对于英文来说,只需要基本的tokenize。本文为大家提供了以下这些工具包。我整理了Python的相…

面向对象(二)——三大特性(封装、继承、多态)

一、封装 目的:保护类,让类更加安全。 做法:让类里面的成员变量变为私有(即访问修饰符)的,做相应的方法或者属性去间接的操作成员变量 ※访问修饰符 private 私有的 只能在该类中访问 protec…

利用伸展树提高区间操作的性能

一、首先,什么是区间操作?以及各种数据结构性能对比 区间操作就是对一个序列的某个区间的所有元素进行的操作。比如,对区间所有元素增加一个值,翻转区间元素等。 对区间操作,最普通的方法就是数组。比如:…

python书写风格_以下两种风格 Python 写法,请问大家倾向哪种:)

看到不同的同事代码,表达同一个意思,主要 if 部分以下哪种写法比较好些:) 第一种写法 def xxxx(ph, sin_id): """ """ with OracleConnect(xxxx) as db_oracle: sql u"xxxxx" has_data,…

中科大开源镜像使用帮助列表

https://lug.ustc.edu.cn/wiki/mirrors/help转载于:https://www.cnblogs.com/hikecn/p/5797959.html

伸展树的代码实现

一、伸展树的数据结构 typedef struct Node {int key; struct Node *lch,*rch,*parent; }* Node ,* Tree; 二、伸展树的基础操作 下面几个函数中,设x 的父节点为 p, p的父节点为g 。 zig( t , x ) 右旋。当p是根节点,x是p的左孩子,将…

枚举命名规范_UE4 C++基础教程 - 编码规范

为什么要学习编码规范?良好的编码规范不仅利于项目维护,也增加了代码辨识度。使我们在阅读代码时能够更加清晰的理解代码意图。维护编码规范不是一件机械化的工作,它更像是一门艺术,让我们在有限的规范内发挥自己的创造力。除此之…

Cocos2d-x之Log输出机制

| 版权声明:本文为博主原创文章,未经博主允许不得转载。 在cocos2d-x中,我们使用log这个函数进行输出,log可以输出很多参数,它的使用方式就和使用c语言中的printf的使用方式差不多。log其实是一个跨平台的日志输出的…

最佳单例模式

initialization on demand holder 模式分析 单例模式要求在应用运行的过程中,只有一个类的实例存在。因此,要确保创建过程是线程安全的,同时要兼顾性能。目前了解到做得比较好的,就是这种initialization on demand holder模式&am…

python接口测试jason_Python 接口测试之Json数据文件操作

引言 前面说过接口测试就是数据的测试,在测试之前,需要准备好测试数据,而测试数据可以用数据库、excel、txt和csv方式,当然还有一种方式,那就是使用json文件来储存测试数据。常用的方式就是这些。 设计思路 python读取…

城市轮廓线求解

问题描述 每一个建筑物用一个三元组表示(L, H, R), 表示左边界, 高度和右边界,轮廓线用X,Y,X,Y…这样的交替式表示,给N个建筑,求轮廓线。 总体思路 首先,要将建筑物离散成点或线,方便运算。将建筑物表示成(L,H),(R,…

wpf的listbox循环数据滚动_滚动版 CentOS Stream 和 Fedora 的关系

如果 CentOS 现在位于 RHEL 的上游,那么 Fedora 会发生什么?那不是 Fedora 在 Red Hat 生态系统中的角色吗?-- Matthew Miller(作者)一封来自 Fedora 项目负责人办公室的信件:(LCTT 译注&#x…

位运算的妙用

位运算所有语言里面都有位运算&#xff0c;&&#xff0c;|,^,~,<<,>>,>>>&#xff0c;但是其他语言不清楚&#xff0c;前端估计许多人直接一扫而过&#xff0c;甚至把这玩意和逻辑或与混淆&#xff0c;甚至有的不认识<<,>>>,问这什么意…

AJAX中的跨域问题:什么是跨域?如何解决跨域问题?

域不一样的&#xff0c;即为跨域&#xff0c;包括&#xff08;协议&#xff0c;域名&#xff0c;端口号&#xff09; 1. 指定允许其他域名访问 header(Access-Control-Allow-Origin:*); 2.使用jsonp转载于:https://www.cnblogs.com/luckyXcc/p/5805909.html

求无序序列每个元素最接近的值

1、问题描述 给一个n个元素的线性表A&#xff0c;对于每个数Ai&#xff0c;找到它之前的数中&#xff0c;和它最接近的数。 即对于每个i&#xff0c;求 Ci min{ |Ai -Aj | | 1< j < i} 1.2算法分析 有两种思路可以解决上诉问题&#xff1a; &#xff08;1&#xff0…