欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

公钥加密

程序员文章站 2022-07-09 13:46:09
...

私钥加密需要一个共享的**,那么如何传递**呢?web环境下,直接传递的话很容易被侦听到,幸好有了公钥加密的出现。公钥加密也叫不对称加密,不对称算法使用一对**对,一个公钥,一个私钥,使用公钥加密的数据,只有私钥能解开(可用于加密);同时,使用私钥加密的数据,只有公钥能解开(签名)。但是速度很慢(比私钥加密慢100到1000倍),公钥的主要算法有RSA,还包括Blowfish,Diffie-Helman等,jdk1.5种提供了对RSA的支持,是一个改进的地方:

 

package com.ijo.security;

import java.security.KeyPair;
import java.security.KeyPairGenerator;

import javax.crypto.Cipher;

public class PublicExample {
 public static void main(String[] args) throws Exception {

  byte[] plainText = "Hellow china".getBytes("UTF8");
  // 构成一个RSA**
  System.out.println("Start generating RSA key");
  KeyPairGenerator ****** = KeyPairGenerator.getInstance("RSA");
  ******.initialize(1024);
  KeyPair key = ******.generateKeyPair();
  System.out.println("Finish generating RSA key");
  // 获得一个RSA的Cipher类,使用公鈅加密
  Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
  System.out.println("" + cipher.getProvider().getInfo());
  System.out.println("Start encryption");
  cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());
  byte[] cipherText = cipher.doFinal(plainText);
  System.out.println("Finish encryption:");
  System.out.println(new String(cipherText, "UTF8"));
  // 使用私鈅解密
  System.out.println("Start decryption");
  cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());
  byte[] newPlainText = cipher.doFinal(cipherText);
  System.out.println("Finish decryption:");
  System.out.println(new String(newPlainText, "UTF8"));
 }
}