java字节数组中的MD5加密减值
java MD5 encryption minus value in byte array
您好,我正在使用以下代码来加密字符串。
我发现 MD5 make 在 -127 - +128 值中工作。
我得到的是负值。
public static void main(String[] args) throws Exception {
String message = "smile";
encrypt("Jack the Bear");
}
public static void encrypt(String password) throws Exception {
byte byteData[] =null;
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
md.update(password.getBytes("US-ASCII"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byteData = md.digest();
System.out.println(Arrays.toString(byteData));
}
我的输出:[101, 23, 66, 106, 91, -51, 6, 119, -13, 23, -101, 108, -122, 27, 20, -124]
实际输出:[101, 23, 66, 106, 91, 205, 6, 119, 243, 23, 155, 108, 134, 27, 20, 132]
这是因为 Java 中的 byte
类型(与几乎所有其他类型一样)是有符号的,这意味着它的范围是 -128..127
.
如果要将此范围转换为无符号范围 (0..255
),请执行以下操作:
byte b = -2;
int i = b & 0xff;
像这样打印你的结果byteData
:
for (byte b : byteData)
System.out.print((b & 0xff) + " ");
如果要以十六进制格式打印结果:
for (byte b : byteData)
System.out.printf("%02x ", b);
您的摘要计算正确,负字节值没有问题。
Java 中的字节类型范围从 -128 到 +127,这可能有点令人惊讶 - 许多人认为字节是无符号的,但 Java 没有无符号数字类型。
您好,我正在使用以下代码来加密字符串。 我发现 MD5 make 在 -127 - +128 值中工作。
我得到的是负值。
public static void main(String[] args) throws Exception {
String message = "smile";
encrypt("Jack the Bear");
}
public static void encrypt(String password) throws Exception {
byte byteData[] =null;
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
md.update(password.getBytes("US-ASCII"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byteData = md.digest();
System.out.println(Arrays.toString(byteData));
}
我的输出:[101, 23, 66, 106, 91, -51, 6, 119, -13, 23, -101, 108, -122, 27, 20, -124]
实际输出:[101, 23, 66, 106, 91, 205, 6, 119, 243, 23, 155, 108, 134, 27, 20, 132]
这是因为 Java 中的 byte
类型(与几乎所有其他类型一样)是有符号的,这意味着它的范围是 -128..127
.
如果要将此范围转换为无符号范围 (0..255
),请执行以下操作:
byte b = -2;
int i = b & 0xff;
像这样打印你的结果byteData
:
for (byte b : byteData)
System.out.print((b & 0xff) + " ");
如果要以十六进制格式打印结果:
for (byte b : byteData)
System.out.printf("%02x ", b);
您的摘要计算正确,负字节值没有问题。
Java 中的字节类型范围从 -128 到 +127,这可能有点令人惊讶 - 许多人认为字节是无符号的,但 Java 没有无符号数字类型。