将密钥转换为字符串和副词 [英] Converting Secret Key into a String and Vice Versa

查看:139
本文介绍了将密钥转换为字符串和副词的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在生成一个密钥,需要将其存储在数据库中,因此我将其转换为字符串,但是从字符串中取回密钥。实现这一点的可能方法是什么?



我的代码是

  SecretKey key = KeyGenerator.getInstance(AES)。generateKey(); 
String stringKey = key.toString();
System.out.println(stringKey);

如何从String中获取密钥?

解决方案

您可以将 SecretKey 转换为字节数组( byte [] ),然后Base64将其编码为 String 。要转换回 SecretKey ,Base64解码字符串,并在 SecretKeySpec 中重新构建您的原始 SecretKey



对于Java 8



SecretKey to字符串:

  //创建新密钥
SecretKey secretKey = KeyGenerator.getInstance(AES) .generateKey();
//获取base64编码版本的密钥
String encodedKey = Base64.getEncoder()。encodeToString(secretKey.getEncoded());

String到SecretKey:

  //解码base64编码的字符串
byte [] decodedKey = Base64.getDecoder()。decode(encodedKey);
//使用SecretKeySpec
重建密钥SecretKey originalKey = new SecretKeySpec(decodedKey,0,decodedKey.length,AES);






对于Java 7和之前(包括Android):



注意:可以跳过Base64编码/解码部分,只存储字节[] 在SQLite。也就是说,执行Base64编码/解码不是一项昂贵的操作,您可以在几乎任何数据库中存储字符串,无任何问题。



注意II:早期的Java版本在 java.lang java.util 包之一中不包括Base64。然而,可以使用 Apache Commons编解码器的编解码器, Bouncy Castle Guava



SecretKey to String:

 code> // CREATE NEW KEY 
//获取编码的密钥(这可以存储在数据库中)

SecretKey secretKey;
String stringKey;

尝试{secretKey = KeyGenerator.getInstance(AES)。generateKey();}
catch(NoSuchAlgorithmException e){/ * LOG YOUR EXCEPTION * /}

if(secretKey!= null){stringKey = Base64.encodeToString(secretKey.getEncoded(),Base64.DEFAULT)}

String到SecretKey:

  //解码你的BASE64 STRING 
// REBUILD KEY USING SecretKeySpec

byte [] encodedKey = Base64.decode(stringKey,Base64.DEFAULT);
SecretKey originalKey = new SecretKeySpec(encodedKey,0,encodedKey.length,AES);


I am generating a key and need to store it in DB, so I convert it into a String, but to get back the key from the String. What are the possible ways of accomplishing this?

My code is,

SecretKey key = KeyGenerator.getInstance("AES").generateKey();
String stringKey=key.toString();
System.out.println(stringKey);

How can I get the key back from the String?

解决方案

You can convert the SecretKey to a byte array (byte[]), then Base64 encode that to a String. To convert back to a SecretKey, Base64 decode the String and use it in a SecretKeySpec to rebuild your original SecretKey.

For Java 8

SecretKey to String:

// create new key
SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();
// get base64 encoded version of the key
String encodedKey = Base64.getEncoder().encodeToString(secretKey.getEncoded());

String to SecretKey:

// decode the base64 encoded string
byte[] decodedKey = Base64.getDecoder().decode(encodedKey);
// rebuild key using SecretKeySpec
SecretKey originalKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES"); 


For Java 7 and before (including Android):

NOTE I: you can skip the Base64 encoding/decoding part and just store the byte[] in SQLite. That said, performing Base64 encoding/decoding is not an expensive operation and you can store strings in almost any DB without issues.

NOTE II: Earlier Java versions do not include a Base64 in one of the java.lang or java.util packages. It is however possible to use codecs from Apache Commons Codec, Bouncy Castle or Guava.

SecretKey to String:

// CREATE NEW KEY
// GET ENCODED VERSION OF KEY (THIS CAN BE STORED IN A DB)

    SecretKey secretKey;
    String stringKey;

    try {secretKey = KeyGenerator.getInstance("AES").generateKey();}
    catch (NoSuchAlgorithmException e) {/* LOG YOUR EXCEPTION */}

    if (secretKey != null) {stringKey = Base64.encodeToString(secretKey.getEncoded(), Base64.DEFAULT)}

String to SecretKey:

// DECODE YOUR BASE64 STRING
// REBUILD KEY USING SecretKeySpec

    byte[] encodedKey     = Base64.decode(stringKey, Base64.DEFAULT);
    SecretKey originalKey = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");

这篇关于将密钥转换为字符串和副词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆