加密 数字签名

import java.io.IOException;
import java.io.StringWriter;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.DSAPublicKey;
import java.util.HashMap;
import java.util.Map;

import org.bouncycastle.openssl.PEMWriter;

public class GeneratePrivateKey
{
    /**
     * 生成密钥对
     * @param seed
     *            种子
     * @return 密钥对象
     * @throws NoSuchAlgorithmException
     * @throws Exception
     */
    public static Map<String, Object> initKey(String seed)
        throws NoSuchAlgorithmException
    {
        KeyPairGenerator keygen = KeyPairGenerator.getInstance("DSA");
        // 初始化随机产生器
        SecureRandom secureRandom = new SecureRandom();
        secureRandom.setSeed(seed.getBytes());
        keygen.initialize(1024, secureRandom);
       
        KeyPair keys = keygen.genKeyPair();
        // DSA的公钥
        DSAPublicKey publicKey = (DSAPublicKey)keys.getPublic();
        // DSA的私钥
        DSAPrivateKey privateKey = (DSAPrivateKey)keys.getPrivate();
       
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("publicKey", publicKey);
        map.put("privateKey", privateKey);
        return map;
    }
   
    /**
     * 取得私钥
     * @param keyMap
     * @return
     * @throws Exception
     */
    public static DSAPrivateKey getPrivateKey(Map<String, Object> keyMap)
    {
        return  (DSAPrivateKey)keyMap.get("privateKey");
    }
   
    /**
     * 取得公钥
     * @param keyMap
     * @return
     * @throws Exception
     */
    public static DSAPublicKey getPublicKey(Map<String, Object> keyMap)
    {
        return (DSAPublicKey)keyMap.get("publicKey");
    }
   
    /**
     * 生成PEM文件
     * @param object
     * @return
     * @throws IOException
     */
    public static String getPEMStr(Object object) throws IOException
    {
        StringWriter stringWriter = new StringWriter();
        PEMWriter pemWriter = new PEMWriter(stringWriter); 
        //pemWriter.writeObject( keyPair.getPrivate());
        pemWriter.writeObject(object);
        pemWriter.close();
        return stringWriter.toString();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值