java RSA 加密/解密
2014-04-04 18:22
417 查看
package cn.shinkong.cxf.security; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import javax.crypto.Cipher; import org.apache.ws.security.util.Base64; public class Encryption_RSA { /** 指定加密算法为RSA */ private final String ALGORITHM = "RSA"; /** 密钥长度,用来初始化 */ private final int KEYSIZE = 1024; /** 指定公钥存放文件 */ private String PUBLIC_KEY_FILE = "PublicKey"; /** 指定私钥存放文件 */ private static final String PRIVATE_KEY_FILE = System.getProperty("user.dir"); private String path = ""; /** 生成公钥和私钥 */ @SuppressWarnings("unused") private void generateKeyPair() throws Exception { // /** RSA算法要求有一个可信任的随机数源 // SecureRandom secureRandom = new SecureRandom(); //为RSA算法创建一个KeyPairGenerator对象 KeyPairGenerator keyPairGenerator = KeyPairGenerator .getInstance(ALGORITHM); // 利用上面的随机数据源初始化这个KeyPairGenerator对象 // keyPairGenerator.initialize(KEYSIZE, secureRandom); keyPairGenerator.initialize(KEYSIZE); //生成密匙对 KeyPair keyPair = keyPairGenerator.generateKeyPair(); //得到公钥 RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); // 得到私钥 RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate(); ObjectOutputStream oos1 = null; ObjectOutputStream oos2 = null; try { /** 用对象流将生成的密钥写入文件 (默认在文件下)*/ oos1 = new ObjectOutputStream(new FileOutputStream(PUBLIC_KEY_FILE)); oos2 = new ObjectOutputStream( new FileOutputStream(PRIVATE_KEY_FILE)); oos1.writeObject(publicKey); oos2.writeObject(privateKey); } catch (Exception e) { throw e; } finally { /** 清空缓存,关闭文件输出流 */ oos1.close(); oos2.close(); } } /** * 加密方法 * @param String 源数据 * @return String 密文 * @throws Exception */ public String encrypt(String source) throws Exception { // generateKeyPair(); RSAPublicKey publicKey; ObjectInputStream ois = null; try { // 将文件中的公钥对象读出 ois = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE+path)); // 从 ObjectInputStream 读取对象。 publicKey = (RSAPublicKey) ois.readObject(); } catch (Exception e) { throw e; } finally { ois.close(); } //得到Cipher对象来实现对源数据的RSA加密 Cipher cipher = Cipher.getInstance(ALGORITHM); // 用密钥初始化此 Cipher。 cipher.init(Cipher.ENCRYPT_MODE, publicKey); //使用平台的默认字符集将此 String 编码为 byte 序列 byte[] b = source.getBytes(); /** 执行加密操作 */ byte[] b1 = cipher.doFinal(b); return Base64.encode(b1); } /** * 解密算法 * * @param String 密文 * @return 数据 * @throws Exception */ public String decrypt(String cryptograph) throws Exception { RSAPrivateKey privateKey; ObjectInputStream ois = null; try { /** 将文件中的私钥对象读出 */ ois = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE+path)); privateKey = (RSAPrivateKey) ois.readObject(); } catch (Exception e) { throw e; } finally { ois.close(); } /** 得到Cipher对象对已用公钥加密的数据进行RSA解密 */ Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, privateKey); //Base64 转码 byte[] b1 = Base64.decode(cryptograph); /** 执行解密操作 */ byte[] b = cipher.doFinal(b1); return new String(b); } public String getPath() { return path; } public void setPath(String path) { this.path = path; } }
相关文章推荐
- java RSA 加密解密算法 入门
- C# Java间进行RSA加密解密交互(三)
- Java加密/解密算法快速入门下篇[包括MD5、BASE64、DES、RSA等]
- IOS and JAVA 的 RSA 加密解密
- Java加密解密快速入门【包括MD5、BASE64、DES、RSA等算法】
- JAVA实现RSA加密解密 非对称算法
- Java加密解密快速入门下篇【包括MD5、BASE64、DES、RSA等算法】
- 用javascript与java进行RSA加密与解密
- java实现RSA加密和解密
- C# Java间进行RSA加密解密交互 .
- rsa实现js前台加密java后台解密
- java RSA加密解密
- RSA AES 前端JS与后台JAVA的加密解密的是实现
- JS客户端RSA加密,Java服务端解密
- java RSA加密解密实现
- Java使用RSA加密解密及签名校验
- java RSA 加密解密算法 入门
- Java加密解密快速入门上篇【包括MD5、BASE64、DES、RSA等算法】
- JAVA 获取RSA非对称加密,私钥加密、公钥解密
- java实现RSA的简单加密解密