慕粉4284617
2016-10-25 20:19
为什么已经获取了私钥了还要用keyfactory?
老师的意思的是密钥的转换,实际上并不需要转换,也不需要重新生成keyfactory。可能是实际项目中一般会这样,因为实际接受方和发送方并不知道对方的密钥的encoded format(编码格式),所以需要转换成自己使用encoded format。例如本节里面的X509...之类的。而KeyFactory就是转换格式后重新生成私钥,公钥。
也可以用下面的代码,不需要转换,理论上是可以的:
package com.imooc.RSA;
import org.apache.commons.codec.binary.Hex;
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
/**
* Created by anyuan on 2016/11/23.
*/
public class ImoocRSA {
public static final String src = "imooc security rsa";
public static void main(String[] args) throws Exception {
jdkRSA();
}
public static void jdkRSA() throws Exception {
//初始化密钥
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);//512~65532
KeyPair keyPair = keyPairGenerator.generateKeyPair();
//私钥加密,公钥解密
//下面是产生密钥工厂,用公钥或者私钥产生密钥工厂,进而产生密钥。原则上这里可以省略.密钥转换也可以省略
// KeyFactory keyFactory = KeyFactory.getInstance("RSA");
// PrivateKey privateKey = keyFactory.generatePrivate((KeySpec) keyPair.getPrivate());
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate());
byte[] result = cipher.doFinal(src.getBytes());
System.out.println("**私钥加密,公钥解密**");
System.out.println("加密:" + Hex.encodeHexString(result));
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPublic());
result = cipher.doFinal(result);
System.out.println("解密:" + new String(result));
}
}代码简洁很多。自己写的时候没必要像老师那么繁琐。但是实际项目中就不一定了。
JAVA实现非对称加密
27507 学习 · 37 问题
相似问题