• 大小: 8KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: Java
  • 标签:

资源简介

该class通过调用ElGamalCoder.getKeyFile()方法生成公钥和私钥,公钥文件为publicKey,私钥文件为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

评论

共有 条评论

相关资源