java私钥加密证书

java 中的Cipher类RSA方式能不能用私钥加密公钥解密,完整解释下

KeyPairGenerator keyGen = KeyPairGenerator.getInstance(“RSA”);

keyGen.initialize(1024);

KeyPair key = keyGen.generateKeyPair();

Cipher cipher = Cipher.getInstance(“RSA/ECB/PKCS1Padding”);

//把第二个参数改为 key.getPrivate()

cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());

byte[] cipherText = cipher.doFinal(“Message”.getBytes(“UTF8”));

System.out.println(new String(cipherText, “UTF8”));

//把第二个参数改为key.getPublic()

cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());

byte[] newPlainText = cipher.doFinal(cipherText);

System.out.println(new String(newPlainText, “UTF8”));

正常的用公钥加密私钥解密就是这个过程,如果按私钥加密公钥解密,只要按备注改2个参数就可以。

但是我要提醒楼主,你要公钥解密,公钥是公开的,相当于任何人都查到公钥可以解密。

你是想做签名是吧。

java私钥加密证书

关于公私钥、各种证书、https基本概念扫盲

最近实习需要写一些生成证书的脚本,借此机会顺便搞清楚了许多关于证书这块的疑惑。说到这一块东西,名词多到爆炸,对称加密、非对称加密、密钥、密钥库、公钥、私钥、CA、证书、数字签名、ssh、https、ssl、keytool、openssl、PKCS、X.509以及令人眼花缭乱的文件后缀名,cer、crt、pem、keystore、jks、key、p12、pfx…

先听我讲个故事,这次我们不用Bob和Alice,听完之后再去看这些概念,绝壁恍然大悟。

故事背景: 这是2018年,为了能够安全的进行通信,假设每个人都有俩把锁,一个叫A锁,一个叫B锁,这俩把锁和一般的锁有点区别,每把锁上即带有自己的锁孔又带有另一把锁的钥匙,因此A锁和B锁既是锁又是钥匙。 A锁和B锁唯一配对,A锁锁住之后,只有B锁可以打开,同样B锁锁住之后,只有A锁可以打开 。其中一把锁是公开的,而一把锁则自己保管,不公开。假设默认A锁是公开的,B锁是私有的。

故事内容: 阿里巴巴子弟小学的小明想给隔壁班的小花写封表白信,为了不被别人看到,他将信放入在信箱中,并用小花的A锁将信箱锁住,因为小花的B锁(同是A锁的钥匙)只有小花自己有,所以除了小花以外的任何人拿到信件,都无法看到信件内容。同样小花要给小明写信,那么也要用小明的A锁对信件内容进行保护。

小明与小花通过就这样聊了有一段时间,后来小花觉得差不多了,可以进入秀恩爱的阶段了,跟小明说,以后写信别tm加密了,又不是银行卡密码,被人看到又能怎么样呢?只要看了之后别瞎改就行了。于是小明在写完信后,把信里每个字的拼音首字母拼凑了一个字符串,并取名为 消息摘要 ,然后仅仅将消息摘要放入信箱,用自己的B锁锁住这个信箱。虽然信件本身没有放入安全的信箱,但小明作为一个情书高手,随便一封信都是上万字,如果其他人对信件内容做任何改变,那么拼音首字母组成的字符串几乎肯定会改变,因此小花拿到信件后,先用小明的A锁(B锁的钥匙)打开信箱,拿到小明的摘要,然后小花再对信件内容做同样的处理(即计算信件每个字的拼音首字母,实际上不会用这么简单的算法,而是会用不可逆的hash算法),计算出的字符串值如与小明的信息摘要一致,说明这封信就是小明写给自己的,没有被任何人篡改。

故事高潮: 事情并没有那么简单,小花发现小明只是在信件里对自己热情似火,平常见了面连声招呼都不打,一副不认识的样子。终于有一天小花忍不住了,当面质问小明,小明却说,我什么时候给你写情书了,自作多情吧…于是小花把昨天刚收到的情书狠狠甩在了小明脸上:“上面落款不是你小明吗?怎么了,怂了?”小明一看上面还真是自己的名字,但是自己写没写信自己还不知道吗?小明把自己的作业本拿给小花,并叫自己的同桌做笔迹鉴定,小花发现笔迹的确不大像,看来是有人恶作剧,冒充小明给自己写情书,哎,好尴尬啊。。。

故事讲完了,文章开头涉及的所有概念都与信息的安全传输有关,可以说,一切都是为了安全。关于通信安全,我们通常有三个基本的需求

我们以上面的故事为例说一下这三点安全需求,一开始小明与小花通过A锁( 对应公钥 )加密,B锁( 对应私钥 )解密的通信方式即符合第一点,信件内容本身被加密,而因为公私钥唯一配对,只有配对的密钥才可以解密,因此很难被第三人破解。

之后,为了秀恩爱,他们采用了B锁( 私钥 )加密,A锁( 公钥 )解密的通信方式,其中用私钥对消息摘要加密后的字符串称为 数字签名 ,这样虽然信件可以被人直接看到,但如果被人篡改掉后可以轻易发现数据被篡改。本来以为满足第一条和第二条就可以安全的通信了,但最后才发现小明根本不是小明!为什么会出现这样的问题?因为“小明”说他是小明,小花就以为他是小明,他没有提供任何证明自己真的是小明的认证。因此要想安全通信,我们还需要一个权威第三方的机构来做身份认证,这个机构就是CA机构,通过认证后,CA机构会颁发权威的证书,而有了证书就可以证明身份,就不会出现身份被假冒的情况。而认证的过程则需要向CA机构提供自己的身份信息以及私钥。

对称加密就是通信双方或多方采用的密钥是一样的。加解密速度快,但不够安全。因为一旦密钥泄露,谁都可以对数据进行解密。非对称加密就是当然就是通信双方使用的密钥不同。而公钥和私钥就是非对称加密的一种方式。比较常用的对称加密算法如

AES、DES,非对称加密比较常见的则有sha256,RSA。

非对称加密算法有俩个密钥,一个公钥,一个私钥。公钥和私钥必须配对出现,一对公钥和一个私钥统称为一个 密钥 ,而 密钥库 中可以存放多个密钥,即多对公私钥。

如果你用github的话,应该注意到github链接有俩种方式。一种是https,一种是ssh,通过https经常需要输密码,而通过ssh则不需要。回忆你设置ssh的步骤,本地生成了一个密钥对,并将公钥上传到了github。每次传输用自动本地私钥加密,服务器用你上传的公钥解密,就不需要手动输入密码了。

keytool和openssl是俩个证书管理工具.keytool是java JDK自带的证书管理工具,使用keytool可以生成密钥,创建证书。只要装了jdk,并正确设置了环境变量,就可以之间通过命令行执行keytool命令来管理证书。

openssl则是一个开源的安全套接字层密码库,功能比keytool更加丰富。

PKCS全称Public-Key Cryptography Standards 即公钥标准,PKCS已经发布了15个标准。

PKCS#12 包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀

X.509 则是一个通用的证书标准,规定了证书应该包含哪些内容,X.509通常有俩种编码方式,一种是二进制编码,另一种是base64编码

X.509#DER 二进制格式证书,常用后缀.cer .crt

X.509#PEM 文本格式证书,常用后缀.pem

因为http是明文传输,非常不安全,因此又提出了ssl(Secure Sockets Layer即安全套接字)层协议,即在原来的基础上又加了一层协议用于保障安全传输,可以认为https=ssl+http。很多人刚开始接触https,用浏览器F12打开控制台后。可能发现数据仍然没有加密。要注意https是 传输层加密 ,浏览器F12控制台你看到的还是应用层的数据。

因为本文主要是概念扫盲,帮助理解,因此关于这部分具体细节不作介绍。

.keystore和.jks和.truststore都是java用来存放密钥的文件

.key nginx中私钥文件

而不同的证书文件后缀都是为了区分不同种类的证书的,主要有俩个分类维度

JAVA 公钥与私钥的问题

这个公钥和私钥如果是非对称加密的算法,那么用公钥加密的话,就需要用私钥才能解密了。如果是对称加密的话,就用加密的公钥就可以解密了。

SSL加密通信的过程一般都是首先双方确认大家支持的加密方式,然后采用一种大家都支持的,然后的话,就先用非对称加密将公钥加密然后发给client,然后client解密获得公钥。之后的话,大家就可以用公钥进行对称加密了。

JAVA公钥加密,私钥解密,该怎么解决

这个是非对称加密,你可以考虑用RSA加密方法,然后调用密钥生成函数自动生成公钥和私钥,公钥可以直接发给对方,然后对方用你给的公钥来进行数据加密,加密的结果送回来只有你的私钥才能解开,别人都不可以解开。

JAVA 如何生成证书

下面产生一个自签证书。安装完J2SDK(这里用的是J2SDK1.4)后,在J2SDK安装目录的bin目录下,有一个keytool的可执行程序。利用keytool产生自签证书的步骤如下:

第一步,用-genkey命令选项,产生公私密钥对。在控制台界面输入:keytool -genkey -alias testkeypair -keyalg RSA -keysize 1024 -sigalg MD5withRSA。这里的-alias表示使用这对公私密钥产生新的keystore入口的别名(keystore是用来存放管理密钥对和证书链的,缺省位置是在使用者主目录下,以.keystore为名的隐藏文件,当然也可指定某个路径存放.keystore文件);-keyalg是产生公私钥对所用的算法,这里是RSA;-keysize定义密钥的长度;-sigalg是签名算法,选择MD5withRSA,即用RSA签名,然后用MD5哈希算法摘要。接下来,系统会提示进行一些输入:

输入keystore密码: abc123

您的名字与姓氏是什么?

[Unknown]: Li

您的组织单位名称是什么?

nbs

问题的其他解决办法参考 :

;t=JAVA+

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月26日 12:43:18
下一篇 2024年3月26日 12:49:30

相关推荐

  • 深入java虚拟机pdf,深入java虚拟机 中村成洋 pdf

    在linux环境下,java怎么实现从word格式转换为pdf格式 //设置当前使用的打印机,我的Adobe Distiller打印机名字为 Adobe PDF wordCom.setProperty( ActivePrinter , new Variant( Adobe PDF ));//设置printout的参数,将word文档打印为postscript…

    2024年5月23日
    4400
  • java截取指定长度字符串,java截取指定字符串之后的

    java中如何截取字符串中的指定一部分 第一个参数是开始截取的字符位置。(从0开始)第二个参数是结束字符的位置+1。(从0开始)indexof函数的作用是查找该字符串中的某个字的位置,并且返回。 int end);截取s中从begin开始至end结束时的字符串,并将其赋值给s;split讲解:java.lang.string.split split 方法 将…

    2024年5月23日
    4200
  • java绑定一个端口,java使用端口

    java如何多个service共用一个端口 你如果有多个项目的话,你可以把多个项目放到一个tomcat里面,这样端口相同使用项目名称来进行区分项目。你如果非要使用同一个,你也可以配置不同的域名导向不同的项目。就是访问的域名不同转接到的项目不同。 如果需要同时启动多个程序,要么修改tomcat的配置文件中的监听端口。要么修改jar包程序的监听端口。不能在一台服…

    2024年5月23日
    3400
  • java多线程并发编程基础,Java多线程并发执行返回

    电脑培训分享Java并发编程:核心理论 电脑培训发现本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。 人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接…

    2024年5月23日
    4600
  • 自学java找工作,自学java找工作需要包装简历吗

    自学java学多久可以找到工作 1、自学Java至少需要一年以上的时间才能达到找工作的水平。报班培训四到六个月的时间就可以找到一份不错的工作。 2、自学Java至少需要一年以上的时间才能达到找工作的水平。 3、如果要想找到一份Java相关的工作,需要至少学习5-6个月时间才能就业。Java开发需要掌握一些基础的编程语言知识,比如掌握面向对象的编程思想、基本的…

    2024年5月23日
    4300
  • java左移右移,java 左移

    java位移问题 1、思路:直接用Integer类的bit运算操作。 2、移位操作:左移:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。 3、Java 位运算 Java 位运算[转]一,Java 位运算表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的…

    2024年5月23日
    4200
  • java技术规范,java规范性要求

    现在主流的JAVA技术是什么? java最流行开发技术程序员必看 1 、Git Git一直是世界上最受欢迎的Java工具之一,也是Java开发人员最杰出的工具之一。Git是一个开源工具,是-种出色的分布式版本控制解决方案。 (1).Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱和注解。(2).Java面向对象编…

    2024年5月23日
    4000
  • javasocket编程,Java socket编程中,禁用nagle算法的参数

    Java进行并发多连接socket编程 1、Java可利用ServerSocket类对外部客户端提供多个socket接口。基本的做法是先创建一个ServerSocket实例,并绑定一个指定的端口,然后在这个实例上调用accept()方法等待客户端的连接请求。 2、Socket socket=server.accept(0;Thread handleThrea…

    2024年5月23日
    4600
  • java死亡,java死代码是什么意思

    我的世界传送回死亡点指令是什么? 1、下面就让我们一起来了解一下吧:我的世界回到死的地方的指令是输入/back,就可以回到死亡地点了,当然也可以看信标,因为死亡后会有一道光集中在死亡点,只要循着光就可以找到目的地了。 2、在服务器中的指令 首先打开指令台,在指令行输入“/back”就可以回到自己的死亡地点了。在单人游戏中的指令 在单人游戏中,您无法直接返回到…

    2024年5月23日
    4800
  • myeclipse能部署java工程么,myeclipse支持jdk18

    myeclipse如何建java文件 1、点击【File】—【New】–【Class】在如下界面,输入Class的名字,如Test,点击【Finish】。Test.java文件创建成功。 2、点击【File】—【New】–【Class】 在如下界面,输入Class的名字,如Test,点击【Finish】。 Te…

    2024年5月23日
    3900

发表回复

登录后才能评论



关注微信