[置顶] Rsa 加密解密 java
2017-07-25 21:03
309 查看
前言
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年7月首次在美国公布,当时他们三人都在麻省理工学院工作实习。RSA就是他们三人姓氏开头字母拼在一起组成的 [ 百度百科 ]开始
1 .Java中RSA加密解密和.Net 、Php 有点不同,公钥私钥必须使用PKCS8格式,而.Net、Php却不需要。2 .加密代码如下,注意其中publicCertificate 是PKCS8格式:
@Override public String rsaEncode(String publicCertificate, String text) { try { byte[] publicBytes =baseStrToByte(publicCertificate); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes); KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM); PublicKey pubKey = keyFactory.generatePublic(keySpec); try { // get an RSA cipher object and print the provider final Cipher cipher = Cipher.getInstance(ALGORITHM); // encrypt the plain text using the public key cipher.init(Cipher.ENCRYPT_MODE, pubKey); byte[] cipherBytes = cipher.doFinal(text.getBytes(CharSet)); String encodestr = baseByteToStr(cipherBytes); return encodestr; } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } return null; }
3 .解密代码,注意其中privateCertificate是PKCS8格式
@Override public String rsaDecode(String privateCertificate, String text) { try { byte[] privateBytes = baseStrToByte(privateCertificate); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateBytes); KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM); PrivateKey priKey = keyFactory.generatePrivate(keySpec); byte[] cipherText = null; try { // get an RSA cipher object and print the provider final Cipher cipher = Cipher.getInstance(ALGORITHM); // encrypt the plain text using the public key cipher.init(Cipher.DECRYPT_MODE, priKey); byte[] textbyte = baseStrToByte(text); cipherText = cipher.doFinal(textbyte); String decodestr = new String(cipherText, CharSet); return decodestr; } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } return null; }
4 .辅助方法
/** * @Description (TODO) * @param str * @return */ private byte[] baseStrToByte(String str) { return Base64.getDecoder().decode(str); } /** * @Description (TODO) * @param bytes * @return */ private String baseByteToStr(byte[] bytes) { return Base64.getEncoder().encodeToString(bytes); }
结束
附上单元测试图片一张:相关文章推荐
- java RSA加密解密
- Java-web中利用RSA进行加密解密操作的方法示例
- C# Java间进行RSA加密解密交互(三)
- C# Java间进行RSA加密解密交互(二)
- C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥、一般模式【支持公钥加密,私钥解密】(一)
- js Java rsa 加密解密
- OpenSSL生成证书进行iOS加密,java解密的RSA非对称加密 详解
- java RSA 加密/解密
- RSA加密解密及数字签名Java实现
- rsa实现js前台加密java后台解密
- java RSA 加密解密传输
- Java使用RSA加密解密及签名校验
- Java-web下使用RSA进行加密解密操作
- Java使用RSA加密解密签名及校验
- RSA加密解密及数字签名Java实现
- C# Java间进行RSA加密解密交互(三)
- Java与.Net环境下RSA加密解密交互不成功的问题解决【续】
- Java加密解密快速入门【包括MD5、BASE64、DES、RSA等算法】
- C# Java间进行RSA加密解密交互(二) .
- java RSA加密解密实现(含分段加密)