RSA 非对称加密算法
来源:互联网 发布:淘宝联盟点击数0 编辑:程序博客网 时间:2024/05/16 07:42
RSA 非对称加密算法:import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.security.Key;import java.security.KeyPair;import java.security.KeyPairGenerator;import javax.crypto.Cipher;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;@SuppressWarnings("restriction")public class RSAEncrypt { /** 指定加密算法为RSA */ private static final String ALGORITHM = "RSA"; /** 密钥长度,用来初始化 */ private static final int KEYSIZE = 1024; /** 指定公钥存放文件 */ private static String PUBLIC_KEY_FILE = "src/main/resources/META-INF/key/PublicKey"; /** 指定私钥存放文件 */ private static String PRIVATE_KEY_FILE = "src/main/resources/META-INF/key/PrivateKey"; /** * 生成密钥对 * * @throws Exception */ @SuppressWarnings("unused") private static 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(); /** 得到公钥 */ Key publicKey = keyPair.getPublic(); /** 得到私钥 */ Key privateKey = keyPair.getPrivate(); ObjectOutputStream oos1 = null; ObjectOutputStream oos2 = null; try { /** 用对象流将生成的密钥写入文件 */ oos1 = new ObjectOutputStream( new FileOutputStream(RSAEncrypt.findProjectRootPath().concat(PUBLIC_KEY_FILE))); oos2 = new ObjectOutputStream( new FileOutputStream(RSAEncrypt.findProjectRootPath().concat(PRIVATE_KEY_FILE))); oos1.writeObject(publicKey); oos2.writeObject(privateKey); } catch (Exception e) { throw e; } finally { /** 清空缓存,关闭文件输出流 */ oos1.close(); oos2.close(); } } /** * 加密方法 * * @param source * 源数据 * @return * @throws Exception */ public static String encrypt(String source) throws Exception { // generateKeyPair(); Key publicKey; ObjectInputStream ois = null; try { /** 将文件中的公钥对象读出 */ ois = new ObjectInputStream(new FileInputStream(RSAEncrypt.findProjectRootPath().concat(PUBLIC_KEY_FILE))); publicKey = (Key) ois.readObject(); } catch (Exception e) { throw e; } finally { ois.close(); } /** 得到Cipher对象来实现对源数据的RSA加密 */ Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, publicKey); byte[] b = source.getBytes(); /** 执行加密操作 */ byte[] b1 = cipher.doFinal(b); BASE64Encoder encoder = new BASE64Encoder(); return encoder.encode(b1); } /** * 解密算法 * * @param cryptograph * 密文 * @return * @throws Exception */ public static String decrypt(String cryptograph) throws Exception { Key privateKey; ObjectInputStream ois = null; try { /** 将文件中的私钥对象读出 */ ois = new ObjectInputStream(new FileInputStream(RSAEncrypt.findProjectRootPath().concat(PRIVATE_KEY_FILE))); privateKey = (Key) ois.readObject(); } catch (Exception e) { throw e; } finally { ois.close(); } /** 得到Cipher对象对已用公钥加密的数据进行RSA解密 */ Cipher cipher = Cipher.getInstance(ALGORITHM); cipher.init(Cipher.DECRYPT_MODE, privateKey); BASE64Decoder decoder = new BASE64Decoder(); byte[] b1 = decoder.decodeBuffer(cryptograph); /** 执行解密操作 */ byte[] b = cipher.doFinal(b1); return new String(b); } public static String findProjectRootPath() { /* * This method in the jar package access path is not correct */ // RSAEncrypt encrypt = new RSAEncrypt(); // String path = // encrypt.getClass().getResource("").toString().replace("file:/", ""); // path = path.substring(0, path.indexOf("live/target") + 5); /* * This method is based on the current file to obtain an absolute * address * */ return new File("").getAbsolutePath().replaceAll("\\\\", "//").concat("/"); };
0 0
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- 非对称加密算法RSA
- RSA 非对称加密算法
- 非对称加密算法(RSA)
- RSA ~ 非对称加密算法
- RSA 非对称加密算法
- 非对称加密算法RSA
- 非对称加密算法-RSA算法
- JAVA 非对称加密算法RSA
- 非对称加密算法RSA学习
- RSA非对称的加密算法
- Java非对称加密算法--RSA
- UGUI中Button和Toggle 添加动态事件
- 无法解析或打开软件包的列表或是状态文件解决方案
- 使用Eclipse将APP打包、签名、上线流程
- leetcode之Path Sum
- 数值<3>__笔记(9)
- RSA 非对称加密算法
- 虚拟环境下使用fuel安装部署opesntack
- Yii2 使用十六 数据库操作汇总
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
- LeetCode之Breadth-first Search题目汇总
- hadoop集群ambari搭建(2)之制作hadoop本地源
- iOS button.titleLabel和直接设置button setText
- 各种语音算法应用场景
- Android IntentService源码解读