1.RSA公私钥生成器、签名、验签
public class RSAUtils {
public static Map genKey() throws Exception{
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kep = kpg.generateKeyPair();
Provider p = kpg.getProvider();
PrivateKey pkey = kep.getPrivate();
PublicKey pubkey = kep.getPublic();
Map<String,Object> param=new HashMap<String,Object>();
param.put("PublicKey", new String(Base64Utils.encode(pubkey.getEncoded())));
param.put("PrivateKey", new String(Base64Utils.encode(pkey.getEncoded())));
return param;
}
public static String sign(String content, String privateKey) throws Exception {
byte[] str=Base64Utils.decode(privateKey.getBytes("UTF-8"));
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(str);
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
java.security.Signature signature = java.security.Signature.getInstance("SHA1WithRSA");
signature.initSign(priKey);
signature.update(content.getBytes("UTF-8"));
byte[] signed = signature.sign();
return new String(Base64Utils.encode(signed),"UTF-8");
}
public static boolean verify(String content, String sign, String public_key)
throws Exception {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
byte[] encodedKey = Base64Utils.decode(public_key.getBytes("UTF-8"));
PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
java.security.Signature signature = java.security.Signature.getInstance("SHA1WithRSA");
signature.initVerify(pubKey);
signature.update(content.getBytes("UTF-8"));
boolean bverify = signature.verify(Base64Utils.decode(sign.getBytes("UTF-8")));
return bverify;
}
}
2.DES加密、解密
public class DESUtils {
public static byte[] encrypt(byte plainText[],String desKey) throws Exception {
SecureRandom sr = new SecureRandom();
byte rawKeyData[] = desKey.getBytes();
DESKeySpec dks = new DESKeySpec(rawKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
javax.crypto.SecretKey key = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(1, key, sr);
byte data[] = plainText;
byte encryptedData[] = cipher.doFinal(data);
return encryptedData;
}
public static byte[] decrypt(byte encryptText[],String desKey) throws Exception {
SecureRandom sr = new SecureRandom();
byte rawKeyData[] = desKey.getBytes();
DESKeySpec dks = new DESKeySpec(rawKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
javax.crypto.SecretKey key = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(2, key, sr);
byte encryptedData[] = encryptText;
byte decryptedData[] = cipher.doFinal(encryptedData);
return decryptedData;
}
3.MD5签名、验签
public class MD5Utils {
public static String sign(String text, String key, String input_charset) {
text = text + key;
return DigestUtils.md5Hex(getContentBytes(text, input_charset));
}
public static boolean verify(String text, String sign, String key, String input_charset) {
text = text + key;
String mysign = DigestUtils.md5Hex(getContentBytes(text, input_charset));
if(mysign.equals(sign)) {
return true;
}
else {
return false;
}
}
private static byte[] getContentBytes(String content, String charset) {
if (charset == null || "".equals(charset)) {
return content.getBytes();
}
try {
return content.getBytes(charset);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
}
}
}