首页 > 编程语言 >java非对称加密,rsa

java非对称加密,rsa

时间:2024-01-30 10:34:48浏览次数:27  
标签:公钥 私钥 java rsa 解密 Cipher result 加密 非对称

 

1.甲方构建密钥对儿,将公钥公布给乙方,将私钥保留。
2.甲方使用私钥加密数据,然后用私钥对加密后的数据签名,发送给乙方签名以及加密后的数据;乙方使用公钥、签名来验证待解密数据是否有效,如果有效使用公钥对数据解密。
3.乙方使用公钥加密数据,向甲方发送经过加密后的数据;甲方获得加密数据,通过私钥解密。
Ps:关于数字签名会在后续的章节中介绍。可以看看这个帖子了解下http://justjavac.iteye.com/blog/1144151

一般公司这样做的。
甲乙公司各有自己的一套公钥私钥。
甲用乙公布的公钥加密,信息传递到乙,乙用自己的私钥解密。 --- 这一套是乙方的公私钥。
乙用甲公布的公钥加密,信息传递到甲,甲用自己的私钥解密。 --- 这一套是甲方的公私钥。
注:公钥长度远远小于私钥,公钥长度比较短,便于公钥保存。

 

package Asymmetric.encryption;

import org.apache.commons.codec.binary.Hex;
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
/**
 * {@link http://www.cnblogs.com/allanzhang/}
 * @author 小卖铺的老爷爷
 *
 */
public class RSATest {
    public static final String src = "laoyeye rsa";
    public static void main(String[] args) throws Exception {
        jdkRSA();
    }
    public static void jdkRSA() throws Exception {
        //初始化密钥
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(512);//512~65532
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        //私钥加密,公钥解密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate());
        byte[] result = cipher.doFinal(src.getBytes());
        System.out.println("**私钥加密,公钥解密**");
        System.out.println("加密:" + Hex.encodeHexString(result));
        cipher.init(Cipher.DECRYPT_MODE, keyPair.getPublic());
        result = cipher.doFinal(result);
        System.out.println("解密:" + new String(result));
    }
}

 

标签:公钥,私钥,java,rsa,解密,Cipher,result,加密,非对称
From: https://www.cnblogs.com/xiaoliu66007/p/17996559

相关文章

  • JAVA Spring Boot快速开始
    实践环境SpringBoot3.2.1Maven3.8.8JDK1.8.0_331创建项目通过http://start.spring.io/网站创建包含SpringBoot的项目,具体如下:点击GENERATE按钮后,会自动生成并下载SpringBootQuickStartDemo.zip导入项目解压述下载的项目压缩包,解压后的项目文件结构如下:E:codePro......
  • Java中,遍历List集合有以下四种方式
    1.增强for循环(foreach):这种方式是最简单的,也是最易读的。它直接对集合中的每个元素进行操作,不需要额外的迭代器或索引变量。但是,这种方式不能在遍历过程中修改集合的结构(例如添加或删除元素)。2.使用迭代器:迭代器提供了一种通用的遍历集合的方式,可以在遍历过程中修改集合的结构。但......
  • Java学习(day1)
    注释单行注释`//publicclass多行注释/*publicclasshellopvsm*/文档注释~~~(没啥用)/**213213**/标识符首字符可以字母、下划线、美元符(不能是数字和其他符号)StringAhello="Q";Stringheloo="Q";String$he="Q";String_hello="Q";大小写敏感......
  • 《实战Java高并发程序设计(第2版)》PDF
    内容简介在单核CPU时代,单任务在一个时间点只能执行单一程序,随着多核CPU的发展,并行程序开发变得尤为重要。《实战Java高并发程序设计(第2版)》主要介绍基于Java的并行程序设计基础、思路、方法和实战。第一,立足于并发程序基础,详细介绍Java进行并行程序设计的基本方法。第二,进一步详细......
  • [转][Java] 二进制、八进制、十进制、十六进制
    //二进制7System.out.println(0b111);//八进制73System.out.println(0111);//十进制111System.out.println(111);//十六进制273System.out.println(0x111);基本数据类型整数byte、short、int、long浮点数float、double字符  char布尔 boolean......
  • java——ip黑名单设计方案(大全+实战)
    java——ip黑名单设计方案(大全+实战)大家好,今天来设计一个ip黑名单功能。即封禁一些类似ddos的非法ip环境:springboot+jdk11本文源码地址:https://gitee.com/xue-shangren/blog-src/tree/master/java-blacklist-design自定义拦截器思路:将黑名单ip存入一个txt文件中(置于resource......
  • java 判断当前时间是否可以执行
    判断时间privatebooleancanTheTimeExecute(){try{if(StringUtils.isEmpty(containerStockSyncTime)){log.info("[handleContainerStockSyncTask]-executetimeisempty。");returnfalse;}//配置中心按照分钟......
  • java8线上GC问题排查
    问题线上长时间fullGc项目输出了对应的gc日志,启动参数里增加了对应启动参数-verbose:gc-Xloggc:/logs/java_gc.log-XX:+PrintGCDateStamps-XX:+PrintGCApplicationStoppedTime-XX:+PrintGCApplicationConcurrentTime-XX:+PrintHeapAtGC-XX:HeapDumpPath=/logs/java_he......
  • Java编程学习(intellij idea)
    打开IntelliJIDEA新建Project新建Module新建Package输入Package名,enter新建JavaClass在Class中编程......
  • Java删除及下载
    卸载JDK删除JAVA的安装目录删除JAVA_HOME删除path下关于JAVA的目录命令行窗口java-version安装JDK搜索JDK8,找到下载地址同意协议下载电脑对应版本双击安装JDK记住安装路径D:\Environment\java\jdk1.8\配置环境变量我的电脑-->右键-->属性点击高级系统设置在系......