我想使用条形码(代码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");
}
谢谢!
答案 0 :(得分:2)
您所拥有的是编码问题,您要转换为非标准编码的问题。我要做的是转换为base43编码。但是,您可能需要实现自己的转换。您应该研究如何在任意碱基之间进行转换,并对加密的字节输出进行转换。本质上,您将获取字节的base10值(如果是无符号,则在0到255之间),并将其转换为两个不同的base43字符。
快速谷歌搜索base43给了我this。我没有用过自己,但看起来它可以工作。