【发布时间】:2014-10-21 17:59:42
【问题描述】:
我想使用条形码(代码 39)来表示一个字符串,并且我希望使用 AES 对该字符串进行加密。
但是,barcode 只能显示 43 个字符。如何加密它以使结果仅使用可用的字符集?
这是我目前所拥有的:
public static byte[] encryptAES(String seed, String cleartext)
throws Exception {
byte[] rawKey = getRawKey(seed.getBytes("ASCII"));
SecretKeySpec skeySpec = new SecretKeySpec(rawKey, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/NOPADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
return cipher.doFinal(cleartext.getBytes("ASCII"));
}
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(BLOCKS, sr); // 192 and 256 bits may not be available
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}
public static void main(String [] args)
{
String str = "312432432";
String key = "4AFJ3243J";
String result = new String(encryptAES(key,str), "ASCII");
}
谢谢!
【问题讨论】:
-
那个“密钥派生”方法不是密钥派生方法。它会根据平台产生不同的结果。如果我没记错的话,它在最新版本的 Android 中停止工作了。
标签: java android cryptography aes barcode