Java ISO-8859-1能否正确编码MD5字节?

Java ISO-8859-1能否正确编码MD5字节?,java,md5,decode,encode,Java,Md5,Decode,Encode,1.字符串中有一些数据: String data = "some......"; 2.并使用MD5将其转换为字节: byte [] result = MD5.toMD5(data); byte [] decodeBytes = encodeString.getBytes("ISO-8859-1"); 3.现在我将其编码为字符串: String encodeString = new String(result,"ISO-8895-1"); 4.然后将其解码为字节: byte [] deco

1.字符串中有一些数据:

String data = "some......";
2.并使用MD5将其转换为字节:

byte [] result = MD5.toMD5(data);
byte [] decodeBytes = encodeString.getBytes("ISO-8859-1");
3.现在我将其编码为字符串:

String encodeString = new String(result,"ISO-8895-1");
4.然后将其解码为字节:

byte [] decodeBytes = encodeString.getBytes("ISO-8859-1");
这里我的问题是:解码字节是否等于
结果?

我的困惑是在
结果中是否会出现
,以及在步骤3中是否会导致截断


如果让
解码字节
等于
结果
有任何问题,并且如果我在步骤1中限制字符串的数据类型,例如只允许字母和数字,问题是否可以避免?

如果ISO-8859-1,这是一个8位字符代码。虽然不包括65个代码点(用于控制字符),但字符串方法处理这些代码点时,就好像ISO/IEC 6429中定义的控制是该字符集的一部分一样

往返字节值0到255工作正常,同样适用于字节[]

byte[] bs = new byte[256];
String encode() throws Exception {
    return new String( bs, "ISO-8859-1" );
}
byte[] decode( String s ) throws Exception{
    return s.getBytes( "ISO-8859-1" );
}
 void set(){
    for( int i = 0; i < bs.length; ++i ){
        bs[i] = (byte)i;
    }
}
boolean cmp( byte[] x ){
    for( int i = 0; i < bs.length; ++i ){
        if( bs[i] != x[i] ){
            System.out.println( i + ": " + bs[i] + " != " + x[i] );
            return false;
         }
    }
    return true;
}
void round() throws Exception{
    String s = encode();
    if( s.length() != 256 ) throw new IllegalStateException();
        byte[] res = decode( s );
        if( ! cmp( res ) ) System.out.println( "false" );
    }
}
byte[]bs=新字节[256];
字符串编码()引发异常{
返回新字符串(bs,“ISO-8859-1”);
}
字节[]解码(字符串s)引发异常{
返回s.getBytes(“ISO-8859-1”);
}
空集(){
对于(int i=0;i
Java字符串不是以null结尾的,因此零字节没有问题。并不是所有的字符编码都可以循环使用,这可能是一个问题,但我不确定这种特殊的编码。(请注意,您可能希望将散列显示为十六进制,而不是直接转换其字节。)@JeffreyBosboom我知道十六进制字符串,但现在我面临一些库的奇怪用法,如此。您可能无法检索原始散列,否。您需要更改步骤3。@LouisWasserman我在第128行找到了本机函数。看来ISO-8859-1没有真正的编码,所以我认为使用是安全的,对吗?“一些库”比如什么奇怪的用法“比如什么?”?它真的希望以
字符串的形式接收MD5吗?请原谅我的英语不好,我的理解是字节[]可以在ISO-8859-1中往返,对吗?是的,我实际运行了往返。见新增代码UTF-8肯定不行。非常感谢!救我几天!