java代码生成密钥库 jdk生成密钥

在java中生成密钥对后如何保存

1、 用Vector保存并序列化存储到文件

创新互联专注于增城网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供增城营销型网站建设,增城网站制作、增城网页设计、增城网站官网定制、重庆小程序开发公司服务,打造增城网络公司原创品牌,更为您提供增城网站排名全网营销落地服务。

2、 键值对的形式写入property文件

3、 存数据库

java 如果随机生成秘钥对并获取

好像是,..这个你可以将公钥私钥放到一个MAP中 在这个MAP中初始化随即产生器然后生成密钥对 我也刚接触 还没看懂... //生成密钥

public static MapString,Object initKey(String seed) throws Exception{

KeyPairGenerator keygen = KeyPairGenerator.getInstance(ALGORITHM);

//初始化随机产生器

SecureRandom sr = new SecureRandom();

sr.setSeed(seed.getBytes());

keygen.initialize(KEY_SIZE,sr);

KeyPair keys = keygen.genKeyPair();

DSAPublicKey publicKey = (DSAPublicKey) keys.getPublic();

DSAPrivateKey privateKey = (DSAPrivateKey) keys.getPrivate();

MapString,Object map = new HashMapString,Object(2);

map.put(PUBLIC_KEY, publicKey);

map.put(PRIVATE_KEY, privateKey);

return map;

}

用java keytool工具生成keystore文件的问题

在申请服务器证书时,用户需要提供证书签名请求文件(CSR)。CSR文件是一个从您的服务器生成的加密数据文件,包含了您的公司信息和web server信息。

一、 创建证书Keystore

keytool -genkey -alias -keyalg RSA –keysize 2048 -keystore

重要:

! 当创建时必须制定您的keystore 位置;

! 如果您正在续订您的证书,您必须创建新的key pair 和 keystore;

! 创建您的CSR和安装您的证书,您使用它来创建自签名的密钥存储库时,请使用相同的别名。

例如:

C:\ keytool -genkey -alias myalias -keysize 2048 -keyalg RSA -keystore c:\.mykeystore

输入keystore密码: password (请输入保护证书密钥的密码)

您的名字与姓氏是什么?请输入域名,例如:

您的组织单位名称是什么?请输入单位名称,如: Beijing eTsec Technology Co.,Ltd.

您的组织名称是什么?请输入部门名称,如: IT Dept

您所在的城市或区域名称是什么?输入城市名称,如:Beijing

您所在的州或省份名称是什么?输入省份名称,如:Beijing

该单位的两字母国家代码是什么?中国请输入CN

CN=, OU= Beijing eTsec, O=IT, L= Beijing, ST= Beijing, C=CN 正确吗?输入 Y

输入的主密码(如果和 keystore 密码相同,按回车):按回车

确保记住您所输入的密码,注意生成CSR时,在第2部分中会使用它。

二、生成证书签名请求(CSR)

1. keytool -certreq -keyalg RSA -alias -file certreq.csr -keystore

重要:

! 创建您的CSR和安装您的证书,您使用它来创建自签名的密钥存储库时,请使用相同的别名。

例如:

C:\keytool -certreq -keyalg RSA -alias myalias -file certreq.txt -keystore c:\.mykeystore

输入keystore密码:

2. 打开生成CSR文件certreq.txt 。这个CSR文件显示如下:

-----BEGIN NEW CERTIFICATE REQUEST-----

MIIBujCCASMCAQAwejELMAkGA1UEBhMCQ0ExEDAOBgNVBAgTB09udGFyaW8xDzANBgNVBAcTBk90

dGF3YTEQMA4GA1UEChMHRW50cnVzdDETMBEGA1UECxMKRW50cnVzdCBDUzEhMB8GA1UEAxMYd3d3

5w6T+q/f+wIDAQABoAAwDQYJKoZIhvcNAQEEBQADgYEAF+0hqAqXumz/vGrzGVhKHlnxd7HW3ezS

GIbIUcOy1YdDc/1ZCqRpu3utYIZ6welK++l+QjlbL6p5RJJETkkLKXjb/WVFajNuPl7Yob9pbwA7

JBrCCKbFj+kzDNbGhCR1RgFA9vQj5vob41Vj+k+TQchliuTLL9rFXNDHrtgTMtA=

-----END NEW CERTIFICATE REQUEST-----

java加密解密代码

package com.cube.limail.util;

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;/**

* 加密解密类

*/

public class Eryptogram

{

private static String Algorithm ="DES";

private String key="CB7A92E3D3491964";

//定义 加密算法,可用 DES,DESede,Blowfish

static boolean debug = false ;

/**

* 构造子注解.

*/

public Eryptogram ()

{

} /**

* 生成密钥

* @return byte[] 返回生成的密钥

* @throws exception 扔出异常.

*/

public static byte [] getSecretKey () throws Exception

{

KeyGenerator keygen = KeyGenerator.getInstance (Algorithm );

SecretKey deskey = keygen.generateKey ();

System.out.println ("生成密钥:"+bytesToHexString (deskey.getEncoded ()));

if (debug ) System.out.println ("生成密钥:"+bytesToHexString (deskey.getEncoded ()));

return deskey.getEncoded ();

} /**

* 将指定的数据根据提供的密钥进行加密

* @param input 需要加密的数据

* @param key 密钥

* @return byte[] 加密后的数据

* @throws Exception

*/

public static byte [] encryptData (byte [] input ,byte [] key ) throws Exception

{

SecretKey deskey = new javax.crypto.spec.SecretKeySpec (key ,Algorithm );

if (debug )

{

System.out.println ("加密前的二进串:"+byte2hex (input ));

System.out.println ("加密前的字符串:"+new String (input ));

} Cipher c1 = Cipher.getInstance (Algorithm );

c1.init (Cipher.ENCRYPT_MODE ,deskey );

byte [] cipherByte =c1.doFinal (input );

if (debug ) System.out.println ("加密后的二进串:"+byte2hex (cipherByte ));

return cipherByte ;

} /**

* 将给定的已加密的数据通过指定的密钥进行解密

* @param input 待解密的数据

* @param key 密钥

* @return byte[] 解密后的数据

* @throws Exception

*/

public static byte [] decryptData (byte [] input ,byte [] key ) throws Exception

{

SecretKey deskey = new javax.crypto.spec.SecretKeySpec (key ,Algorithm );

if (debug ) System.out.println ("解密前的信息:"+byte2hex (input ));

Cipher c1 = Cipher.getInstance (Algorithm );

c1.init (Cipher.DECRYPT_MODE ,deskey );

byte [] clearByte =c1.doFinal (input );

if (debug )

{

System.out.println ("解密后的二进串:"+byte2hex (clearByte ));

System.out.println ("解密后的字符串:"+(new String (clearByte )));

} return clearByte ;

} /**

* 字节码转换成16进制字符串

* @param byte[] b 输入要转换的字节码

* @return String 返回转换后的16进制字符串

*/

public static String byte2hex (byte [] b )

{

String hs ="";

String stmp ="";

for (int n =0 ;n b.length ;n ++)

{

stmp =(java.lang.Integer.toHexString (b [n ] 0XFF ));

if (stmp.length ()==1 ) hs =hs +"0"+stmp ;

else hs =hs +stmp ;

if (n b.length -1 ) hs =hs +":";

} return hs.toUpperCase ();

}

/**

* 字符串转成字节数组.

* @param hex 要转化的字符串.

* @return byte[] 返回转化后的字符串.

*/

public static byte[] hexStringToByte(String hex) {

int len = (hex.length() / 2);

byte[] result = new byte[len];

char[] achar = hex.toCharArray();

for (int i = 0; i len; i++) {

int pos = i * 2;

result[i] = (byte) (toByte(achar[pos]) 4 | toByte(achar[pos + 1]));

}

return result;

}

private static byte toByte(char c) {

byte b = (byte) "0123456789ABCDEF".indexOf(c);

return b;

}

/**

* 字节数组转成字符串.

* @param String 要转化的字符串.

* @return 返回转化后的字节数组.

*/

public static final String bytesToHexString(byte[] bArray) {

StringBuffer sb = new StringBuffer(bArray.length);

String sTemp;

for (int i = 0; i bArray.length; i++) {

sTemp = Integer.toHexString(0xFF bArray[i]);

if (sTemp.length() 2)

sb.append(0);

sb.append(sTemp.toUpperCase());

}

return sb.toString();

}

/**

* 从数据库中获取密钥.

* @param deptid 企业id.

* @return 要返回的字节数组.

* @throws Exception 可能抛出的异常.

*/

public static byte[] getSecretKey(long deptid) throws Exception {

byte[] key=null;

String value=null;

//CommDao dao=new CommDao();

// List list=dao.getRecordList("from Key k where k.deptid="+deptid);

//if(list.size()0){

//value=((com.csc.sale.bean.Key)list.get(0)).getKey();

value = "CB7A92E3D3491964";

key=hexStringToByte(value);

//}

if (debug)

System.out.println("密钥:" + value);

return key;

}

public String encryptData2(String data) {

String en = null;

try {

byte[] key=hexStringToByte(this.key);

en = bytesToHexString(encryptData(data.getBytes(),key));

} catch (Exception e) {

e.printStackTrace();

}

return en;

}

public String decryptData2(String data) {

String de = null;

try {

byte[] key=hexStringToByte(this.key);

de = new String(decryptData(hexStringToByte(data),key));

} catch (Exception e) {

e.printStackTrace();

}

return de;

}

} 加密使用: byte[] key=Eryptogram.getSecretKey(deptid); //获得钥匙(字节数组)

byte[] tmp=Eryptogram.encryptData(password.getBytes(), key); //传入密码和钥匙,获得加密后的字节数组的密码

password=Eryptogram.bytesToHexString(tmp); //将字节数组转化为字符串,获得加密后的字符串密码解密与之差不多


名称栏目:java代码生成密钥库 jdk生成密钥
网页URL:http://scyanting.com/article/dopsisp.html