一个RSA加密算法
package com;import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
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.Cipher;
public class RSACoder {
//算法
public static String Key_ALGORITHM="RSA";
//私钥
public static String Private_Key="RSAPrivateKey";
//公钥
public static String Public_Key="RSAPublicKey";
//密钥长度
public static int Key_Size=512;
public static Map<String,Object> initKey() throws Exception{
//实例化密钥生成器
KeyPairGenerator keypairgenerator=KeyPairGenerator.getInstance(Key_ALGORITHM);
//初始化
keypairgenerator.initialize(Key_Size);
//获得密钥对
KeyPair keypair=keypairgenerator.generateKeyPair();
//密钥
RSAPrivateKey pritekey=(RSAPrivateKey)keypair.getPrivate();
//公钥
RSAPublicKey pubkey=(RSAPublicKey)keypair.getPublic();
Map<String,Object> keymap=new HashMap<String,Object>(2);
keymap.put(Private_Key, pritekey);
keymap.put(Public_Key, pubkey);
return keymap;
}
//获得密钥
public static byte[] getPrivateKey(Map<String,Object>keymap){
Key pritekey=(Key)keymap.get(Private_Key);
return pritekey.getEncoded();
}
//获得公钥
public static byte[] getPublicKey(Map<String,Object>keymap){
Key pubkey=(Key)keymap.get(Public_Key);
return pubkey.getEncoded();
}
//私钥加密
public static byte[] encryptByPrivateKey(byte[] key,byte[] data) throws Exception{
//实例化密钥材料
PKCS8EncodedKeySpec pcs8spec=new PKCS8EncodedKeySpec(key);
//实例化密钥工厂
KeyFactory keyfactory=KeyFactory.getInstance(Key_ALGORITHM);
//生成私钥
PrivateKey pritekey=keyfactory.generatePrivate(pcs8spec);
//私钥加密
Cipher cipher=Cipher.getInstance(pritekey.getAlgorithm());
cipher.init(Cipher.ENCRYPT_MODE,pritekey);
return cipher.doFinal(data);
}
//公钥解密
public static byte[] decryptByPublicKey(byte[] key,byte[] data) throws Exception{
//实例化公钥材料
X509EncodedKeySpec x509spec=new X509EncodedKeySpec(key);
//实例化密钥工厂
KeyFactory keyfactory=KeyFactory.getInstance(Key_ALGORITHM);
//获得公钥
PublicKey pubkey=keyfactory.generatePublic(x509spec);
//对数据进行解密
Cipher cipher=Cipher.getInstance(Key_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, pubkey);
return cipher.doFinal(data);
}
}
转自:http://yuncode.net/code/c_5136f1783044357
页:
[1]