两种都有
公钥加密,私钥解密
私钥加密,公钥解密
感兴趣你可以debug时查看其结构,或者查看一下实现的源码。
String str="imooc security";
Cipher cipher=Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, senderSecretKey);
byte[] bs=cipher.doFinal(str.getBytes());
Base64在很多包里面有。注意导入包的正确性。
注意应该是import org.apache.commons.codec.binary.Base64;
而不是import java.util.Base64;
老师的意思的是密钥的转换,实际上并不需要转换,也不需要重新生成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)); } }
代码简洁很多。自己写的时候没必要像老师那么繁琐。但是实际项目中就不一定了。
这个是加密的字符串太长了,我也没找到解决方案的,谁有办法请明示
我的锅,他妈的
public static String input = "";
输入为空串,调了一个小时,电脑都快砸烂,这要把手剁了
能把哪里有乱码,什么情况下出的乱码详细描述下吗?