工作中遇到一个银行对接项目,对接双方采用交换公钥方式,使用对方公钥加密/验签,已方私钥解密/签名。
这里就用到了java的 非对称加密“RSA”
1 生成RSA密钥对
package utils;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class MyRSAutils{
public static final String KEY_ALGORITHM = "RSA";
public static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding";
public static final String PUBLIC_KEY = "publicKey";
public static final String PRIVATE_KEY = "privateKey";
public static void main(String[] args) throws Exception {
String txt="aaaaaaaaaaaaaaaaaaaaaaaaaaaa";//原文
//获得密钥对Map
Map<String, byte[]> keyMap=generateKeyBytes();
//获得公钥
String publicKeyStr=encryptBASE64(keyMap.get(PUBLIC_KEY));