103 lines
2.6 KiB
Java
103 lines
2.6 KiB
Java
package com.gh.common.util;
|
|
|
|
import android.util.Base64;
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.InputStream;
|
|
import java.security.KeyFactory;
|
|
import java.security.NoSuchAlgorithmException;
|
|
import java.security.PublicKey;
|
|
import java.security.spec.InvalidKeySpecException;
|
|
import java.security.spec.X509EncodedKeySpec;
|
|
|
|
import javax.crypto.Cipher;
|
|
|
|
public class RSEUtils {
|
|
|
|
/**
|
|
* 公钥
|
|
*/
|
|
private static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQConqikyOCl5f/VO/vZ+s6wVOhFJcI7o7hYvaLQ5Lzt5/HXbozTeRrGonKFPJurapf9hzjkg0F4/BNFMGXRVlReVdwh+Px5rbXU/ceikF8Ouf67qxiGAuDVC+4e3eIHh+mH68DlqWFJ78sB80iSLXelflGuHkbTOTtaC5F2l+AgxQIDAQAB";
|
|
|
|
/**
|
|
* 加密算法RSA
|
|
*/
|
|
private static final String KEY_ALGORITHM = "RSA";
|
|
|
|
/**
|
|
* 得到公钥
|
|
*
|
|
* @return PublicKey 公钥
|
|
* @throws NoSuchAlgorithmException
|
|
* @throws InvalidKeySpecException
|
|
*/
|
|
private static PublicKey getPublicKeyFromX509() throws Exception {
|
|
byte[] decodedKey = Base64.decode(PUBLIC_KEY, Base64.DEFAULT);
|
|
X509EncodedKeySpec x509 = new X509EncodedKeySpec(decodedKey);
|
|
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
|
|
return keyFactory.generatePublic(x509);
|
|
}
|
|
|
|
/**
|
|
* 使用公钥加密
|
|
*
|
|
* @param content
|
|
* @return
|
|
*/
|
|
public static String encryptByPublic(String content) {
|
|
try {
|
|
PublicKey pubkey = getPublicKeyFromX509();
|
|
|
|
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
|
|
cipher.init(Cipher.ENCRYPT_MODE, pubkey);
|
|
|
|
byte[] data = content.getBytes("UTF-8");
|
|
byte[] output = cipher.doFinal(data);
|
|
|
|
String s = new String(Base64.encode(output, Base64.DEFAULT));
|
|
|
|
return s;
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* 使用公钥解密
|
|
*
|
|
* @param content 密文
|
|
* @return 解密后的字符串
|
|
*/
|
|
public static String decryptByPublic(String content) {
|
|
try {
|
|
PublicKey pubkey = getPublicKeyFromX509();
|
|
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
|
|
cipher.init(Cipher.DECRYPT_MODE, pubkey);
|
|
InputStream ins = new ByteArrayInputStream(Base64.decode(content,
|
|
Base64.DEFAULT));
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
byte[] buffer = new byte[128];
|
|
int len;
|
|
while ((len = ins.read(buffer)) != -1) {
|
|
byte[] block = null;
|
|
if (buffer.length == len) {
|
|
block = buffer;
|
|
} else {
|
|
block = new byte[len];
|
|
for (int i = 0; i < len; i++) {
|
|
block[i] = buffer[i];
|
|
}
|
|
}
|
|
baos.write(cipher.doFinal(block));
|
|
}
|
|
return new String(baos.toByteArray(), "utf-8");
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
}
|