此文章是vip文章,如何查看?  

1,点击链接获取密钥 http://nicethemes.cn/product/view29882.html

2,在下方输入文章查看密钥即可立即查看当前vip文章


Java密钥操作

  • 时间:
  • 浏览:
  • 来源:互联网

密钥相关类


  • SecretKeySpec,KeyGenerator,KeyFactory,SecretKeyFactory,KeyPairGenerator
    • 对称密钥生成:SecretKeySpec keyGenerator SecretKeyFactory
    • 非对称密钥生成:KeyPairGenerator
  • 常用的KeyGenerator、KeyPairGenerator ;可以满足使用

代码


  • 代码示例
    • 类: j2se.security.SecretKeyGenerator
SecretKeySpec
  • 用SecretKeySpec类生成密钥。这种方式生成密钥较简单,设置也比较少,也没有随机因素
  • 此类以与 provider 无关的方式指定一个密钥。
  • 可以使用此类来根据一个字节数组构造一个 SecretKey,而无须通过一个(基于 provider 的)SecretKeyFactory。
  • 此类仅对能表示为一个字节数组并且没有任何与之相关联的钥参数的原始密钥有用,如,DES 或者 Triple DES 密钥。
// SecretKeySpec 生成密钥需要加入密钥原始文本
String key = "zhegeshikey";
byte[] keyByte = key.getBytes("UTF-8");
// 创建一个密钥
SecretKey secretKey = new SecretKeySpec(keyByte, algorithmDES);
KeyGenerator
  • 用KeyGenerator生成密钥,此类提供(对称)密钥生成器的功能。
  • 密钥生成器是使用此类的某个 getInstance 类方法构造的。
  • KeyGenerator 对象可重复使用,也就是说,在生成密钥后,可以重复使用同一个 KeyGenerator 对象来生成更多的密钥。
// 创建KeyGenerator对象,指定算法
KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithmDES);
// 可以初始化一些配置:密钥长度,随机数等
keyGenerator.init(256);
// 配置随机串,加强加密安全性
// 声明随机串,可以指定种子 SecureRandom(byte[] seed)
SecureRandom random = new SecureRandom();
keyGenerator.init(random);
SecretKey secretKey = keyGenerator.generateKey();
SecretKeyFactory
  • 用SecretKeyFactory生成密钥,此类表示秘密密钥的工厂。
// 设置密钥参数
String key = "zhegeshikey";
byte[] keyByte = key.getBytes("UTF-8");

// 创建SecretKeyFactory对象,指定算法
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(algorithmDES);
// 指定密钥规范,此处的SecretKeySpec是密钥规范,而不是密钥。API真搓
DESKeySpec keySpec = new DESKeySpec(keyByte);
// 根据密钥规范生成密钥
SecretKey secretKey = secretKeyFactory.generateSecret(keySpec);
KeyFactory
  • keyFactory 也是根据规范生成密钥的工厂。但是该类只能生成对应的公私钥非对称的密钥。
// 设置密钥参数
String publicKeyStr = "305c300d06092a864886f70d0101010500034b0030480241008cba35c237c379e0ecb6653ebfbec9d31e6f0591c403addcd660a56a0cc0a51bea2f5947b1671d8811bdfa019437ad9e479bc0a7e41b3acfca1ccb596a6090bd0203010001";
byte[] publicKeyByte = BytesHexConverter.hexStringToBytes(publicKeyStr);
String privateKeyStr = "30820155020100300d06092a864886f70d01010105000482013f3082013b0201000241008cba35c237c379e0ecb6653ebfbec9d31e6f0591c403addcd660a56a0cc0a51bea2f5947b1671d8811bdfa019437ad9e479bc0a7e41b3acfca1ccb596a6090bd0203010001024010ad082dc999da5972f3722feb5cda61b01b8bd76818df8369cbee0e1110caffc48949b26bd5d4796372592ee33cd35be9b66c066c51b8c138c1e5cde2bda929022100d51ba92bf83175b5fd86382322a835cdb1055fc4b205c2942cdb090abde8ddaf022100a90d274021a1c49756e14ded10da57d0af4caddd2f4f62a4a7813ac4021f9f530221009e83d0b6300b3a2f80c11188b102c5e2964615124e0912cefcfe801f495ba96902205ea6c4b13da36b8528d9e15db8afe7b72a4f8e916729d59b47462df70d11538d02210097c3e4d703ec0fd803e572c262eafd735ff1c2a544985540fd2673caca7fdd66";
byte[] privateKeyByte = BytesHexConverter.hexStringToBytes(privateKeyStr);

// 指定密钥规范,此处的KeySpec是密钥规范,而不是密钥。API真搓
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKeyByte);
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(privateKeyByte);
// 根据算法获取密钥工厂
KeyFactory keyFactory = KeyFactory.getInstance(algorithmRSA);
// 根据密钥规范生成公私密钥
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
KeyPairGenerator
  • 密钥对生成,生成非对称密钥
  • KeyPairGenerator类用于生成公钥和私钥对。密钥对生成器是使用getInstance工厂方法(返回一个给定类的实例的静态方法)构造的。
  • 特定算法的密钥对生成器可以创建能够与此算法一起使用的公钥/私钥对。它还可以将特定于算法的参数与每个生成的密钥关联。
// 创建 KeyPairGenerator对象,指定加密算法
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithmRSA);
// 可以初始化一些配置:密钥长度,随机数。
// 配置随机串,加强加密安全性
// 声明随机串,可以指定种子 SecureRandom(byte[] seed)
SecureRandom random = new SecureRandom();
keyPairGenerator.initialize(512, random);
// 生成密钥
KeyPair keyPair = keyPairGenerator.generateKeyPair();
// 获取公私密钥
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
密钥打印输出
/**
 * 获取二进制密钥,打印密钥
 *
 * @param key
 * @return
 */
private String getKeyContent(Key key) {
   // 获取密钥二进制流
   byte[] secretKeyByte = key.getEncoded();
   // 以十六进制输出
   String secretKeyContent = BytesHexConverter.bytesToHexString(secretKeyByte);
   System.out.println(secretKeyContent);
   // 输出BASE64
   // 此处输出的BASE64密钥会换行;
   // 换用Apache的 commons-codec.jar, Base64.encodeBase64String(byte[])得到的编码字符串是不带换行符的
   System.out.println(Base64.encode(secretKeyByte));
   return secretKeyContent;
}

本文链接http://element-ui.cn/news/show-577116.aspx