java字符串转RSA的key_RSA密钥的数据类型转换:由合法的string到PublicKey或PrivateKey...

1packagepack1;2

3 importjava.security.Key;4 importjava.security.KeyFactory;5 importjava.security.KeyPair;6 importjava.security.KeyPairGenerator;7 importjava.security.PrivateKey;8 importjava.security.PublicKey;9 importjava.security.Signature;10 importjava.security.interfaces.RSAPrivateKey;11 importjava.security.interfaces.RSAPublicKey;12 importjava.security.spec.PKCS8EncodedKeySpec;13 importjava.security.spec.X509EncodedKeySpec;14

15 importjavax.crypto.Cipher;16

17 importorg.apache.commons.codec.binary.Base64;18

19 importsun.misc.BASE64Decoder;20 importsun.misc.BASE64Encoder;21

22

23 public classRSAtest{24 public static final String KEY_ALGORITHM="RSA";25 public static final String SIGNATURE_ALGORITHM="MD5withRSA";26 private static final int KEY_SIZE=1024;27 private static final String PUBLIC_KEY="RSAPublicKey";28 private static final String PRIVATE_KEY="RSAPrivateKey";29 public static String str_pubK = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqPvovSfXcwBbW8cKMCgwqNpsYuzF8RPAPFb7LGsnVo44JhM/xxzDyzoYtdfNmtbIuKVi9PzIsyp6rg+09gbuI6UGwBZ5DWBDBMqv5MPdOF5dCQkB2Bbr5yPfURPENypUz+pBFBg41d+BC+rwRiXELwKy7Y9caD/MtJyHydj8OUwIDAQAB";30 public static String str_priK = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKo++i9J9dzAFtbxwowKDCo2mxi7MXxE8A8VvssaydWjjgmEz/HHMPLOhi1182a1si4pWL0/MizKnquD7T2Bu4jpQbAFnkNYEMEyq/kw904Xl0JCQHYFuvnI99RE8Q3KlTP6kEUGDjV34EL6vBGJcQvArLtj1xoP8y0nIfJ2Pw5TAgMBAAECgYAGGB8IllMwxceLhjf6n1l0IWRH7FuHIUieoZ6k0p6rASHSgWiYNRMxfecbtX8zDAoG0QAWNi7rn40ygpR5gS1fWDAKhmnhKgQIT6wW0VmD4hraaeyP78iy8BLhlvblri2nCPIhDH5+l96v7D47ZZi3ZSOzcj89s1eS/k7/N4peEQJBAPEtGGJY+lBoCxQMhGyzuzDmgcS1Un1ZE2pt+XNCVl2b+T8fxWJH3tRRR8wOY5uvtPiK1HM/IjT0T5qwQeH8Yk0CQQC0tcv3d/bDb7bOe9QzUFDQkUSpTdPWAgMX2OVPxjdq3Sls9oA5+fGNYEy0OgyqTjde0b4iRzlD1O0OhLqPSUMfAkEAh5FIvqezdRU2/PsYSR4yoAdCdLdT+h/jGRVefhqQ/6eYUJJkWp15tTFHQX3pIe9/s6IeT/XyHYAjaxmevxAmlQJBAKSdhvQjf9KAjZKDEsa7vyJ/coCXuQUWSCMNHbcR5aGfXgE4e45UtUoIE1eKGcd6AM6LWhx3rR6xdFDpb9je8BkCQB0SpevGfOQkMk5i8xkEt9eeYP0fi8nv6eOUcK96EXbzs4jV2SAoQJ9oJegPtPROHbhIvVUmNQTbuP10Yjg59+8=";31 /**

32 * 使用getPublicKey得到公钥,返回类型为PublicKey33 *@parambase64 String to PublicKey34 *@throwsException35 */

36 public static PublicKey getPublicKey(String key) throwsException {37 byte[] keyBytes;38 keyBytes = (newBASE64Decoder()).decodeBuffer(key);39 X509EncodedKeySpec keySpec = newX509EncodedKeySpec(keyBytes);40 KeyFactory keyFactory = KeyFactory.getInstance("RSA");41 PublicKey publicKey =keyFactory.generatePublic(keySpec);42 returnpublicKey;43 }44 /**

45 * 转换私钥46 *@parambase64 String to PrivateKey47 *@throwsException48 */

49 public static PrivateKey getPrivateKey(String key) throwsException {50 byte[] keyBytes;51 keyBytes = (newBASE64Decoder()).decodeBuffer(key);52 PKCS8EncodedKeySpec keySpec = newPKCS8EncodedKeySpec(keyBytes);53 KeyFactory keyFactory = KeyFactory.getInstance("RSA");54 PrivateKey privateKey =keyFactory.generatePrivate(keySpec);55 returnprivateKey;56 }57

58 //***************************签名和验证*******************************

59 public static byte[] sign(byte[] data) throwsException{60 PrivateKey priK =getPrivateKey(str_priK);61 Signature sig =Signature.getInstance(SIGNATURE_ALGORITHM);62 sig.initSign(priK);63 sig.update(data);64 returnsig.sign();65 }66

67 public static boolean verify(byte[] data,byte[] sign) throwsException{68 PublicKey pubK =getPublicKey(str_pubK);69 Signature sig =Signature.getInstance(SIGNATURE_ALGORITHM);70 sig.initVerify(pubK);71 sig.update(data);72 returnsig.verify(sign);73 }74

75 //************************加密解密**************************

76 public static byte[] encrypt(byte[] bt_plaintext)throwsException{77 PublicKey publicKey =getPublicKey(str_pubK);78 Cipher cipher = Cipher.getInstance("RSA");79 cipher.init(Cipher.ENCRYPT_MODE, publicKey);80 byte[] bt_encrypted =cipher.doFinal(bt_plaintext);81 returnbt_encrypted;82 }83

84 public static byte[] decrypt(byte[] bt_encrypted)throwsException{85 PrivateKey privateKey =getPrivateKey(str_priK);86 Cipher cipher = Cipher.getInstance("RSA");87 cipher.init(Cipher.DECRYPT_MODE, privateKey);88 byte[] bt_original =cipher.doFinal(bt_encrypted);89 returnbt_original;90 }91 //********************main函数:加密解密和签名验证*********************

92 public static void main(String[] args) throwsException {93 String str_plaintext = "这是一段用来测试密钥转换的明文";94 System.err.println("明文:"+str_plaintext);95 byte[] bt_cipher =encrypt(str_plaintext.getBytes());96 System.out.println("加密后:"+Base64.encodeBase64String(bt_cipher));97

98 byte[] bt_original =decrypt(bt_cipher);99 String str_original = newString(bt_original);100 System.out.println("解密结果:"+str_original);101

102 String str="被签名的内容";103 System.err.println("\n原文:"+str);104 byte[] signature=sign(str.getBytes());105 System.out.println("产生签名:"+Base64.encodeBase64String(signature));106 boolean status=verify(str.getBytes(), signature);107 System.out.println("验证情况:"+status);108 }109

110 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值