|
|
@@ -1,144 +0,0 @@
|
|
|
-package com.x.base.core.project.test;
|
|
|
-
|
|
|
-import java.io.ByteArrayOutputStream;
|
|
|
-import java.io.File;
|
|
|
-import java.io.IOException;
|
|
|
-import java.net.URLDecoder;
|
|
|
-import java.net.URLEncoder;
|
|
|
-import java.security.KeyFactory;
|
|
|
-import java.security.PrivateKey;
|
|
|
-import java.security.PublicKey;
|
|
|
-import java.security.SecureRandom;
|
|
|
-import java.security.spec.PKCS8EncodedKeySpec;
|
|
|
-import java.security.spec.X509EncodedKeySpec;
|
|
|
-import java.util.Date;
|
|
|
-
|
|
|
-import javax.crypto.Cipher;
|
|
|
-import javax.crypto.SecretKey;
|
|
|
-import javax.crypto.SecretKeyFactory;
|
|
|
-import javax.crypto.spec.DESKeySpec;
|
|
|
-
|
|
|
-import org.apache.commons.codec.binary.Base64;
|
|
|
-import org.apache.commons.io.FileUtils;
|
|
|
-import org.apache.commons.lang3.ArrayUtils;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.junit.Test;
|
|
|
-
|
|
|
-public class CryptoClass {
|
|
|
-
|
|
|
- private static final String utf8 = "UTF-8";
|
|
|
-
|
|
|
- private final static String DES = "DES";
|
|
|
- private final static String cipher_init = "DES";
|
|
|
-
|
|
|
- private final static String RSA = "RSA";
|
|
|
-
|
|
|
- public static String encrypt(String data, String key) throws Exception {
|
|
|
- byte[] bt = encrypt(data.getBytes(), key.getBytes());
|
|
|
- //String str = Base64.encodeBase64URLSafeString(bt);
|
|
|
- String str = Base64.encodeBase64URLSafeString(bt);
|
|
|
- return URLEncoder.encode(str, utf8);
|
|
|
- }
|
|
|
-
|
|
|
- public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
|
|
|
- // 生成一个可信任的随机数源
|
|
|
- SecureRandom sr = new SecureRandom();
|
|
|
- // 从原始密钥数据创建DESKeySpec对象
|
|
|
- DESKeySpec dks = new DESKeySpec(key);
|
|
|
- // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
|
|
|
- SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
|
|
|
- SecretKey securekey = keyFactory.generateSecret(dks);
|
|
|
- // Cipher对象实际完成加密操作
|
|
|
- Cipher cipher = Cipher.getInstance(cipher_init);
|
|
|
- // 用密钥初始化Cipher对象
|
|
|
- cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
|
|
|
- return cipher.doFinal(data);
|
|
|
- }
|
|
|
-
|
|
|
- public static String decrypt(String data, String key) throws IOException, Exception {
|
|
|
- if (StringUtils.isEmpty(data)) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- String str = URLDecoder.decode(data, utf8);
|
|
|
- byte[] buf = Base64.decodeBase64(str);
|
|
|
- byte[] bt = decrypt(buf, key.getBytes());
|
|
|
- return new String(bt);
|
|
|
- }
|
|
|
-
|
|
|
- public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
|
|
|
- // 生成一个可信任的随机数源
|
|
|
- SecureRandom sr = new SecureRandom();
|
|
|
- // 从原始密钥数据创建DESKeySpec对象
|
|
|
- DESKeySpec dks = new DESKeySpec(key);
|
|
|
- // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
|
|
|
- SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
|
|
|
- SecretKey securekey = keyFactory.generateSecret(dks);
|
|
|
- // Cipher对象实际完成解密操作
|
|
|
- Cipher cipher = Cipher.getInstance(cipher_init);
|
|
|
- // 用密钥初始化Cipher对象
|
|
|
- cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
|
|
|
- return cipher.doFinal(data);
|
|
|
- }
|
|
|
-
|
|
|
- public static PublicKey rsaPublicKey(String publicKey) throws Exception {
|
|
|
- byte[] keyBytes = Base64.decodeBase64(publicKey);
|
|
|
- X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
|
|
|
- KeyFactory keyFactory = KeyFactory.getInstance(RSA);
|
|
|
- return keyFactory.generatePublic(keySpec);
|
|
|
- }
|
|
|
-
|
|
|
- public static PrivateKey rsaPrivateKey(String privateKey) throws Exception {
|
|
|
- byte[] keyBytes = Base64.decodeBase64(privateKey);
|
|
|
- PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
|
|
|
- KeyFactory keyFactory = KeyFactory.getInstance(RSA);
|
|
|
- return keyFactory.generatePrivate(keySpec);
|
|
|
- }
|
|
|
-
|
|
|
- public static String rsaEncrypt(String content, String publicKey) throws Exception {
|
|
|
- Cipher cipher = Cipher.getInstance(RSA);
|
|
|
- cipher.init(Cipher.ENCRYPT_MODE, rsaPublicKey(publicKey));
|
|
|
- try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
|
|
- byte[] bytes = content.getBytes();
|
|
|
- for (int i = 0; i < bytes.length; i += 100) {
|
|
|
- baos.write(cipher.doFinal(ArrayUtils.subarray(bytes, i, i + 100)));
|
|
|
- }
|
|
|
- return Base64.encodeBase64URLSafeString(baos.toByteArray());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static String rsaDecrypt(String content, String privateKey) throws Exception {
|
|
|
- Cipher cipher = Cipher.getInstance(RSA);
|
|
|
- cipher.init(Cipher.DECRYPT_MODE, rsaPrivateKey(privateKey));
|
|
|
- try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
|
|
- byte[] bytes = Base64.decodeBase64(content);
|
|
|
- for (int i = 0; i < bytes.length; i += 128) {
|
|
|
- baos.write(cipher.doFinal(ArrayUtils.subarray(bytes, i, i + 128)));
|
|
|
- }
|
|
|
- return new String(baos.toByteArray());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static final String TEST_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWcVZIS57VeOUzi8c01WKvwJK9uRe6hrGTUYmF6J/pI6/UvCbdBWCoErbzsBZOElOH8Sqal3vsNMVLjPYClfoDyYDaUlakP3ldfnXJzAFJVVubF53KadG+fwnh9ZMvxdh7VXVqRL3IQBDwGgzX4rmSK+qkUJjc3OkrNJPB7LLD8QIDAQAB";
|
|
|
- public static final String TEST_PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJZxVkhLntV45TOLxzTVYq/Akr25F7qGsZNRiYXon+kjr9S8Jt0FYKgStvOwFk4SU4fxKpqXe+w0xUuM9gKV+gPJgNpSVqQ/eV1+dcnMAUlVW5sXncpp0b5/CeH1ky/F2HtVdWpEvchAEPAaDNfiuZIr6qRQmNzc6Ss0k8HsssPxAgMBAAECgYAWtRy05NUgm5Lc6Og0jVDL/mEnydxPBy2ectwzHh2k7wIHNi8XhUxFki2TMqzrM9Dv3/LySpMl4AE3mhs34LNPy6F+MwyF5X7j+2Y6MflJyeb9HNyT++viysQneoOEiOk3ghxF2/GPjpiEF79wSp+1YKTxRAyq7ypV3t35fGOOEQJBANLDPWl8b5c3lrcz/dTamMjHbVamEyX43yzQOphzkhYsz4pruATzTxU+z8/zPdEqHcWWV39CP3xu3EYNcAhxJW8CQQC2u7PF5Xb1xYRCsmIPssFxil64vvdUadSxl7GLAgjQ9ULyYWB24KObCEzLnPcT8Pf2Q0YQOixxa/78FuzmgbyfAkA7ZFFV/H7lugB6t+f7p24OhkRFep9CwBMD6dnZRBgSr6X8d8ZvfrD2Z7DgBMeSva+OEoOtlNmXExZ3lynO9zN5AkAVczEmIMp3DSl6XtAuAZC9kD2QODJ2QToLYsAfjiyUwsWKCC43piTuVOoW2KUUPSwOR1VZIEsJQWEcHGDQqhgHAkAeZ7a6dVRZFdBwKA0ADjYCufAW2cIYiVDQBJpgB+kiLQflusNOCBK0FT3lg8BdUSy2D253Ih6l3lbaM/4M7DFQ";
|
|
|
-
|
|
|
- @Test
|
|
|
- public void test1() throws Exception {
|
|
|
- System.out.println(decrypt("erG1+eWJCWI=", "xplatform"));
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void test2() throws Exception {
|
|
|
- Long l = (new Date()).getTime();
|
|
|
- System.out.println(encrypt("13336173316#" + l, "12345678"));
|
|
|
- }
|
|
|
-
|
|
|
- @Test
|
|
|
- public void testrsa() throws Exception {
|
|
|
- File s = new File("e:/1.war");
|
|
|
- byte[] ss = FileUtils.readFileToByteArray(s);
|
|
|
- String value = rsaEncrypt(Base64.encodeBase64String(ss), TEST_PUBLIC_KEY);
|
|
|
- byte[] ds = Base64.decodeBase64(rsaDecrypt(value, TEST_PRIVATE_KEY));
|
|
|
- FileUtils.writeByteArrayToFile(new File("e:/2.war"), ds);
|
|
|
- }
|
|
|
-
|
|
|
-}
|