我可以看到它们与我创建字符串所用的字节不同!我已经使用“ AES / CBC / PKCS5Padding”来获取字符串。
public static void main(String[] args) {
try {
int randomNumber = CNStationQueueUtil.randInt(0, 99999);
String key = "AES_KEY_TAKENUMB";
byte[] bytes = EncryptHelper.encrypt(key, String.format("%%%d%%%d", 1001, randomNumber));
String str = new String(bytes, "UTF8");
System.out.println("str = " + str);
System.out.println();
byte[] utf8Bytes = str.getBytes("UTF8");
printBytes(utf8Bytes, "utf8Bytes");
} catch (Exception e) {
e.printStackTrace();
}
}
public class EncryptHelper {
public static byte[] encrypt(String key, String value)
throws GeneralSecurityException {
byte[] raw = key.getBytes(Charset.forName("UTF-8"));
if (raw.length != 16) {
throw new IllegalArgumentException("Invalid key size.");
}
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec,
new IvParameterSpec(new byte[16]));
return cipher.doFinal(value.getBytes(Charset.forName("UTF-8")));
}
public static String decrypt(String key, byte[] encrypted)
throws GeneralSecurityException {
byte[] raw = key.getBytes(Charset.forName("UTF-8"));
if (raw.length != 16) {
throw new IllegalArgumentException("Invalid key size.");
}
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec,
new IvParameterSpec(new byte[16]));
byte[] original = cipher.doFinal(encrypted);
return new String(original, Charset.forName("UTF-8"));
}
}
当您按原样对字符串进行解码时UTF-8
,是因为您将字节编码为UTF-8或兼容格式。您不能只取一个byte[]
随机字节并将其转换为字符串,因为它是二进制数据而不是文本。
您可以做的是对二进制文件使用Base64编码器,并使用Base64解码器将其转换回原始字节。
这样做的一种怪癖方法是使用ISO-8859-1
,但这通常是个坏主意,因为您会混淆二进制数据和文本数据。
问题内容: 我有一些来自json文件的文本。在本文中,我应用了UTF8编码,但是该编码器无法识别非标准字符,并且为大写字符,是否有一种方法可以净化我的字符串? 我的功能: 问题答案: 我找到了解决方案。 UTF8采用8位表ASCII表,而UTF16采用16位ASCII表,解决方案很简单,只需将函数修改为:
字节是基本类型字节的实用程序类。 Class 声明 (Class Declaration) 以下是com.google.common.primitives.Bytes类的声明 - @GwtCompatible public final class Bytes extends Object 方法 (Methods) Sr.No 方法和描述 1 static List《Byte》 asList
import "bytes" bytes包实现了操作[]byte的常用函数。本包的函数和strings包的函数相当类似。 Examples Buffer Buffer (Reader) Compare Compare (Search) TrimPrefix TrimSuffix const MinRead = 512 MinRead是被Buffer.ReadFrom传递给Read调用的最小尺寸。只
问题内容: 我有以下抛出的非常基本的代码; 我尝试将解码设置为Data变量,如下所示,但是会引发相同的错误; 有什么建议? 问题答案: 您只是将其以错误的顺序放置,是无辜的错误。 (深入解答)。正如wim礼貌地指出的那样,在极少数情况下,他们可以选择UTF-16或UTF-32。在这种情况下,对于开发人员而言,这种情况将不那么常见,在这种情况下,他们将有意识地决定放弃宝贵的带宽。因此,如果遇到编码问
Python3 内置函数 描述 bytes 函数返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列。它是 bytearray 的不可变版本。 语法 以下是 bytes 的语法: class bytes([source[, encoding[, errors]]]) 参数 如果 source 为整数,则返回一个长度为 source 的初始化数组; 如果
Python bytes 类型用来表示一个字节串。“字节串“不是编程术语,是我自己“捏造”的一个词,用来和字符串相呼应。 bytes 是 Python 3.x 新增的类型,在 Python 2.x 中是不存在的。 字节串(bytes)和字符串(string)的对比: 字符串由若干个字符组成,以字符为单位进行操作;字节串由若干个字节组成,以字节为单位进行操作。 字节串和字符串除了操作的数据单元不同之