RSA基本的介绍
RSA(Rivest-Shamir-Adleman)算法是目前最常用的公钥加密算法。
1 2 3 4 5
| (1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
(2)甲方获取乙方的公钥,然后用它对信息加密。
(3)乙方得到加密后的信息,用私钥解密。
|
java的基本实现
需要的依赖
1 2 3 4 5 6
| <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency>
|
java代码基本实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| package com.jianfreespace;
import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.*; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map;
public class RSAUtils { private static Map<Integer,String> keyMap=new HashMap<>(){{ put(0,"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChd4T6x/6H+Kos2Amgcr3+LbNGuP8AYu0QwpOrpJpusTzVrRvtXoBR8+SXO9uKlymNQ7X+BTh79LlGxeYX0LvPjBtcIcw3SFNVBsLb1EhXTN1inaODEDnubkbnE9HiAPBRU0Zdr8RPM7a5CVxIohdX4V6tPdhcXOOHkLJDUyX5BwIDAQAB"); put(1,"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKF3hPrH/of4qizYCaByvf4ts0a4/wBi7RDCk6ukmm6xPNWtG+1egFHz5Jc724qXKY1Dtf4FOHv0uUbF5hfQu8+MG1whzDdIU1UGwtvUSFdM3WKdo4MQOe5uRucT0eIA8FFTRl2vxE8ztrkJXEiiF1fhXq092Fxc44eQskNTJfkHAgMBAAECgYBDFoPcJwisujcK1uB5F/O1Dov0kJzzLidN1WrB4GyCHYYnSfvWjnNGmc2awLYhSVlsZnvRhZ3IcxAgRc2qi4HcuxG/VhOkB8ajxENjGHFnixyu0vE8fwawgQBTm9amzgodffI8rhEYsuzY1Wqt9kNAgcVakuyE20LpV9cO5yLqQQJBAL7R8rYY7cVeBVhJfyqb6+smVPuApCVrMo7LAYu3gr6gLHRr69IKROo3s2kdq3H5bWrRBncc38Zvuz89Kz1Wm1ECQQDYns9tcJe3xNxbBDUyg/mLdILCa4ewSDkfDGPsJnTM7/jfFNvy2Cexx93C9YiNbHd5c0SV5Ci/hRJ7r0gf3wjXAkEAltfilN6p/05uzTb0ZttxKKdZoKM1nzrZcZW6+BauLUDzQ2kYtyZVCg3ULrE8mVGClGD+SmSx5OzoSXpyVv/CsQJBAJHJmBq0mzdP42nSFCdyUOF9QX+ttP18Lg1qXlmRrCw9GUayGDGBLn3k4KgUbZmYtXPkkvU6P/5dhgn99tGUXrMCQF1wXxJdMXZK2zYWrkdVU3aDzRx7HaZD5AWsEN1vSGXu50ph49KEBH12AuO1GLWu0inELzc2h6sfxVj7k3daGUA="); }};
public RSAUtils(){
}
public static void getKeyPair() throws Exception { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); keyPairGen.initialize(1024,new SecureRandom()); KeyPair keyPair = keyPairGen.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic(); String publicKeyString=new String(Base64.encodeBase64(publicKey.getEncoded())); String privateKeyString=new String(Base64.encodeBase64(privateKey.getEncoded())); keyMap.put(0,publicKeyString); keyMap.put(1,privateKeyString); System.out.println(keyMap); }
public static String encrypt(String str) throws Exception { byte[] decoded = Base64.decodeBase64(keyMap.get(0)); RSAPublicKey pubKey= (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE,pubKey); String outStr=Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8"))); return outStr; }
public static String decrypt(String str) throws Exception { byte[] inputByte = Base64.decodeBase64(str.getBytes("UTF-8")); byte[] decoded = Base64.decodeBase64(keyMap.get(1)); PrivateKey priKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE,priKey); String outStr=new String(cipher.doFinal(inputByte)); return outStr;
} }
|
调用RSA加密算法模块。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public static void main(String[] args) { try { RSAUtils.getKeyPair(); String password="Jianfreespace"; String outstr = RSAUtils.encrypt(password); String deoutstr = RSAUtils.decrypt(outstr); System.out.println(outstr); System.out.println(deoutstr); InetAddress addr = InetAddress.getLocalHost(); System.out.println("Local HostAddress: "+addr.getHostAddress()); String hostname = addr.getHostName(); System.out.println("Local host name: "+hostname); }catch (Exception e){ System.out.println(e); }
}
|
