From 85d6db123dfc7e1b6de43679564f580aaf434a9a Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 16 Aug 2012 14:52:48 +0800 Subject: [PATCH] add configTool --- .../druid/filter/config/ConfigTool.java | 133 ++++++++++++++++++ .../bvt/filter/config/ConfigToolTest.java | 29 ++++ 2 files changed, 162 insertions(+) create mode 100644 src/main/java/com/alibaba/druid/filter/config/ConfigTool.java create mode 100644 src/test/java/com/alibaba/druid/bvt/filter/config/ConfigToolTest.java diff --git a/src/main/java/com/alibaba/druid/filter/config/ConfigTool.java b/src/main/java/com/alibaba/druid/filter/config/ConfigTool.java new file mode 100644 index 0000000000..38b4074666 --- /dev/null +++ b/src/main/java/com/alibaba/druid/filter/config/ConfigTool.java @@ -0,0 +1,133 @@ +package com.alibaba.druid.filter.config; + +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.SecureRandom; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.LinkedHashMap; +import java.util.Map; + +import javax.crypto.Cipher; + +import com.alibaba.druid.util.Base64; + +public class ConfigTool { + public final static int DEFAULT_KEY_SIZE = 1024; + + public static void main(String[] args) throws Exception { + if (args.length == 0) { + return; + } + + String command = args[0]; + + if ("-gen".equals(command)) { + int keySize = DEFAULT_KEY_SIZE; + + if (args.length > 1) { + keySize = Integer.parseInt(args[1]); + } + + Map result = gen(keySize); + print(result); + + return; + } + + if ("-encrypt".equals(command)) { + String privateKey = args[1]; + String text = args[2]; + + Map result = encrypt(privateKey, text); + print(result); + + return; + } + + if ("-decrypt".equals(command)) { + String publicKey = args[1]; + String text = args[2]; + + Map result = decrypt(publicKey, text); + print(result); + + return; + } + } + + public static void print(Map map) { + for (Map.Entry entry : map.entrySet()) { + System.out.print(entry.getKey()); + System.out.print(" : "); + System.out.println(); + System.out.print(entry.getValue()); + System.out.println(); + System.out.println(); + } + } + + public static Map decrypt(String publicKeyString, String cipherText) throws Exception { + Map map = new LinkedHashMap(); + + byte[] publicKeyBytes = Base64.base64ToByteArray(publicKeyString); + X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(publicKeyBytes); + + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(x509KeySpec); + + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, publicKey); + + byte[] cipherBytes = Base64.base64ToByteArray(cipherText); + byte[] plainBytes = cipher.doFinal(cipherBytes); + String plainText = new String(plainBytes); + + map.put("result", plainText); + + return map; + } + + public static Map encrypt(String privateKeyString, String plain) throws Exception { + Map map = new LinkedHashMap(); + + byte[] privateKeyBytes = Base64.base64ToByteArray(privateKeyString); + PKCS8EncodedKeySpec x509KeySpec = new PKCS8EncodedKeySpec(privateKeyBytes); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(x509KeySpec); + + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, privateKey); + + byte[] plainBytes = plain.getBytes(); + byte[] cipherBytes = cipher.doFinal(plainBytes); + + String cipherText = Base64.byteArrayToBase64(cipherBytes); + + map.put("result", cipherText); + + return map; + } + + public static Map gen(int keySize) throws Exception { + Map map = new LinkedHashMap(); + + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + keyPairGen.initialize(512, new SecureRandom()); + + KeyPair keyPair = keyPairGen.generateKeyPair(); + + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + + map.put("privateKey", Base64.byteArrayToBase64(privateKey.getEncoded())); + map.put("publicKey", Base64.byteArrayToBase64(publicKey.getEncoded())); + + return map; + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/config/ConfigToolTest.java b/src/test/java/com/alibaba/druid/bvt/filter/config/ConfigToolTest.java new file mode 100644 index 0000000000..39c21a4e2e --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/config/ConfigToolTest.java @@ -0,0 +1,29 @@ +package com.alibaba.druid.bvt.filter.config; + +import java.util.Map; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.filter.config.ConfigTool; + +public class ConfigToolTest extends TestCase { + + public void test_configTool() throws Exception { + Map result = ConfigTool.gen(1024); + + String publicKey = result.get("publicKey"); + String privateKey = result.get("privateKey"); + + System.out.println("publicKey : " + publicKey); + System.out.println("privateKey : " + privateKey); + + String cipher = ConfigTool.encrypt(privateKey, "abcdef").get("result"); + System.out.println("cipher : " + cipher); + + String plain = ConfigTool.decrypt(publicKey, cipher).get("result"); + System.out.println("plain : " + plain); + + Assert.assertEquals("abcdef", plain); + } +}