generateKeyPair();
/** 将文件中的公钥对象读出 */
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("PublicKey"));
Key key = (Key) ois.readObject();
ois.close();
/** 得到Cipher对象来实现对源数据的RSA加密 */
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] b = source.getBytes();
/** 执行加密操作 */
byte[] b1 = cipher.doFinal(b);
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(b1);
}
private static void generateKeyPair() throws Exception{
/** RSA算法要求有一个可信任的随机数源 */
SecureRandom sr = new SecureRandom();
/** 为RSA算法创建一个KeyPairGenerator对象 */
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
/** 利用上面的随机数据源初始化这个KeyPairGenerator对象 */
kpg.initialize(1024, sr);
/** 生成密匙对 */
KeyPair kp = kpg.generateKeyPair();
/** 得到公钥 */
Key publicKey = kp.getPublic();
/** 得到私钥 */
Key privateKey = kp.getPrivate();
/** 用对象流将生成的密钥写入文件 */
ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("PublicKey"));
ObjectOutputStream oos2 = new ObjectOutputStream(new FileOutputStream("PrivateKey"));
oos1.writeObject(publicKey);
oos2.writeObject(privateKey);
/** 清空缓存,关闭文件输出流 */
oos1.close();
oos2.close();
}
在上面调用util类里面的方法
String signStr=oid_biz+jno_cli+oid_reguser+uid_cli+price;
PublicKey publicKey=util.loadPublicKeyPair();
String sign=Encrypt(signStr,publicKey);
//RSA读取文件获取公钥,一个PublicKey的对象
public String Encrypt (String sign_str,PublicKey pubKey)//签名格式
{
try
{
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] data=sign_str.getBytes();
byte[] bt=cipher.doFinal(data);
// System.out.println(Base64.encodeBase64String(bt));
String result = Base64.encodeBase64String(bt);
return result;
} catch (Exception e) {
e.printStackTrace();
System.out.println("签名失败!");
}
return "";
}
util类
public class util {
public static String publicKeyFile = "D:/430083public.key";//去文件中读取出来
public static PublicKey loadPublicKeyPair() throws Exception {
FileInputStream fos = new FileInputStream(publicKeyFile);
ObjectInputStream oos = new ObjectInputStream(fos);
//生成密钥
PublicKey pKey;
pKey=(PublicKey)oos.readObject();
oos.close();
fos.close();
return pKey;
}
}