为什么已经获取了私钥了还要用keyfactory?
为什么已经获取了私钥了还要用keyfactory?
为什么已经获取了私钥了还要用keyfactory?
2016-10-25
老师的意思的是密钥的转换,实际上并不需要转换,也不需要重新生成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)); } }
代码简洁很多。自己写的时候没必要像老师那么繁琐。但是实际项目中就不一定了。
举报