資源簡介
該class通過調用ElGamalCoder.getKeyFile()方法生成公鑰和私鑰,公鑰文件為publicKey,私鑰文件為privateKey。
加密:String miwen = ElGamalCoder.decrypt("這里傳入明文", "publicKey"); //publicKey是公鑰文件所在的路徑(包括文件名)
解密:String mingwen = ElGamalCoder.encrypt("這里傳入加密之后的密文","privateKey");//privateKey是私鑰文件所在路徑
加密:String miwen = ElGamalCoder.decrypt("這里傳入明文", "publicKey"); //publicKey是公鑰文件所在的路徑(包括文件名)
解密:String mingwen = ElGamalCoder.encrypt("這里傳入加密之后的密文","privateKey");//privateKey是私鑰文件所在路徑
代碼片段和文件信息
package?com.sta.Util;
import?java.io.ByteArrayInputStream;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?java.io.OutputStream;
import?java.security.AlgorithmParameterGenerator;
import?java.security.AlgorithmParameters;
import?java.security.Key;
import?java.security.KeyFactory;
import?java.security.KeyPair;
import?java.security.KeyPairGenerator;
import?java.security.PrivateKey;
import?java.security.PublicKey;
import?java.security.SecureRandom;
import?java.security.Security;
import?java.security.interfaces.RSAPrivateKey;
import?java.security.interfaces.RSAPublicKey;
import?java.security.spec.PKCS8EncodedKeySpec;
import?java.security.spec.X509EncodedKeySpec;
import?java.util.HashMap;
import?java.util.Map;
import?javax.crypto.Cipher;
import?javax.crypto.interfaces.DHPrivateKey;
import?javax.crypto.interfaces.DHPublicKey;
import?javax.crypto.spec.DHParameterSpec;
import?org.apache.commons.codec.binary.base64;
import?org.bouncycastle.jce.provider.BouncyCastleProvider;
/**
?*?非對稱加密算法ElGamal算法組件
?*?非對稱算法一般是用來傳送對稱加密算法的密鑰來使用的。相對于RSA算法,這個算法只支持私鑰加密公鑰解密
?*?@author?kongqz
?*?*/
public?class?ElGamalCoder?{
//非對稱密鑰算法
public?static?final?String?KEY_ALGORITHM=“ElGamal“;
/**
?*?密鑰長度,DH算法的默認密鑰長度是1024
?*?密鑰長度必須是8的倍數,在160到16384位之間
?*?*/
private?static?final?int?KEY_SIZE=256;
//公鑰
private?static?final?String?PUBLIC_KEY=“ElGamalPublicKey“;
//私鑰
private?static?final?String?PRIVATE_KEY=“ElGamalPrivateKey“;
/**
?*?初始化密鑰對
?*?@return?Map?甲方密鑰的Map
?*?*/
public?static?Mapject>?initKey()?throws?Exception{
//加入對BouncyCastle支持
Security.addProvider(new?BouncyCastleProvider());
AlgorithmParameterGenerator?apg=AlgorithmParameterGenerator.getInstance(KEY_ALGORITHM);
//初始化參數生成器
apg.init(KEY_SIZE);
//生成算法參數
AlgorithmParameters?params=apg.generateParameters();
//構建參數材料
DHParameterSpec?elParams=(DHParameterSpec)params.getParameterSpec(DHParameterSpec.class);
//實例化密鑰生成器
KeyPairGenerator?kpg=KeyPairGenerator.getInstance(KEY_ALGORITHM)?;
//初始化密鑰對生成器
kpg.initialize(elParamsnew?SecureRandom());
KeyPair?keyPair=kpg.generateKeyPair();
//甲方公鑰
PublicKey?publicKey=?keyPair.getPublic();
//甲方私鑰
PrivateKey?privateKey=?keyPair.getPrivate();
//將密鑰存儲在map中
Mapject>?keyMap=new?HashMapject>();
keyMap.put(PUBLIC_KEY?publicKey);
keyMap.put(PRIVATE_KEY?privateKey);
return?keyMap;
}
/**
?*?公鑰加密
?*?@param?data待加密數據
?*?@param?key?密鑰
?*?@return?byte[]?加密數據
?*?*/
public?static?byte[]?encryptByPublicKey(byte[]?databyte[]?key)?throws?Exception{
//加入對BouncyCastle支持
Security.addProvider(new?BouncyCastleProvider());
AlgorithmParameterGenerator?apg=AlgorithmParameterGenerator.getInstance(KEY_ALGORITHM);
//初始化參數生成器
apg.init(KEY_SIZE);
//生成算法參數
AlgorithmParameters?params=apg.generateP
評論
共有 條評論