我正在尝试javax.crypto
在我的应用程序之间实现加密(通过 intnets)。我遵循这个(接受的答案):https://stackoverflow.com/questions/4319496/how-to-encrypt-and-decrypt-data-in-java。问题是据我所知,我需要SecretKeySpec key
两者都相同我的应用程序以加密/解密数据。我不知道如何导出它(作为字符串或任何东西),然后在我的两个应用程序中对其进行硬编码。
问问题
1856 次
1 回答
2
SecretKey
您可以使用该getEncoded()
方法导出一个。这将返回一个字节数组,您可以将其编码为字符串,例如使用 base 64 编码。SecretKeySpec
可以从此编码的字节数组重新创建对象。
只是为了给你一个更好的主意,未经测试:
初始生成和导出
import org.apache.commons.codec.binary.Base64;
// "AES" is the key generation algorith, you might want to use a different one.
KeyGenerator kg = KeyGenerator.getInstance("AES");
// 256-bit key, you may want more or fewer bits.
kg.init(256);
SecretKey key = kg.generateKey();
byte[] keyBytes = key.getEncoded();
// Encode to a String, e.g. base 64 encoded
String encodedKey = new String(Base64.encodeBase64(keyBytes), "UTF-8");
导入/重新创建
// Base 64 decode
byte[] keyBytes = Base64.decodeBase64(encodedKey.getBytes("UTF-8"));
// Need to put the same key generation algorithm in here:
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
于 2013-12-02T15:00:49.603 回答