import org.apache.commons.codec.binary.Base64; import java.io.ByteArrayOutputStream; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.HashMap; import java.util.Map; import javax.crypto.Cipher; String RSA_PUB_KEY= "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNPFO1OaKJbLOH7hVzjj8s+k+spSgG7D2imIpR1ukC3xqgEUYP/vYIiZHXnK04Ddk0ELYee5xDbFfTHSWOK6d2lqK0ydWtLFHCdKpBehM/YKa72zf5KaSJGGgag8EQw4o5ZBS/Ia9w2OxYZ1S94OeRXaA+Z4cy8rBui0hTW9Z0pwIDAQAB" ; String KEY_ALGORITHM = "RSA" ; String SIGNATURE_ALGORITHM = "MD5withRSA" ; int MAX_ENCRYPT_BLOCK = 117 ; int MAX_DECRYPT_BLOCK = 128 ; public static byte [] decryptByPublicKey( byte [] encryptedData, String publicKey) ???????????? throws Exception { ???????? byte [] keyBytes = Base64.decodeBase64(publicKey); ???????? X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); ???????? KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); ???????? Key publicK = keyFactory.generatePublic(x509KeySpec); ???????? Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); ???????? cipher.init(Cipher.DECRYPT_MODE, publicK); ???????? int inputLen = encryptedData.length; ???????? ByteArrayOutputStream out = new ByteArrayOutputStream(); ???????? int offSet = 0 ; ???????? byte [] cache; ???????? int i = 0 ; ???????? // 对数据分段解密 ???????? while (inputLen - offSet > 0 ) { ???????????? if (inputLen - offSet > MAX_DECRYPT_BLOCK) { ???????????????? cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK); ???????????? } else { ???????????????? cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet); ???????????? } ???????????? out.write(cache, 0 , cache.length); ???????????? i++; ???????????? offSet = i * MAX_DECRYPT_BLOCK; ???????? } ???????? byte [] decryptedData = out.toByteArray(); ???????? out.close(); ???????? return decryptedData; ???? } ???? public static byte [] encryptByPublicKey( byte [] data, String publicKey) ???????????? throws Exception { ???????? byte [] keyBytes = Base64.decodeBase64(publicKey); ???????? X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); ???????? KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); ???????? Key publicK = keyFactory.generatePublic(x509KeySpec); ???????? // 对数据加密 ???????? Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); ???????? cipher.init(Cipher.ENCRYPT_MODE, publicK); ???????? int inputLen = data.length; ???????? ByteArrayOutputStream out = new ByteArrayOutputStream(); ???????? int offSet = 0 ; ???????? byte [] cache; ???????? int i = 0 ; ???????? // 对数据分段加密 ???????? while (inputLen - offSet > 0 ) { ???????????? if (inputLen - offSet > MAX_ENCRYPT_BLOCK) { ???????????????? cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK); ???????????? } else { ???????????????? cache = cipher.doFinal(data, offSet, inputLen - offSet); ???????????? } ???????????? out.write(cache, 0 , cache.length); ???????????? i++; ???????????? offSet = i * MAX_ENCRYPT_BLOCK; ???????? } ???????? byte [] encryptedData = out.toByteArray(); ???????? out.close(); ???????? return encryptedData; ???? } ???? String str = "idNum=633335199606143151&name=蔺四十&phone=17610010005" ; String result = "" ; try { ???? result = Base64.encodeBase64String(encryptByPublicKey(str.getBytes(), RSA_PUB_KEY)); ???? System.out.println(result); } catch (Exception e) { ???? // TODO Auto-generated catch block ???? e.printStackTrace(); } print(result); vars.put( "sign" ,result); return result; |