ISO-8859-1可以正确编码MD5字节吗?

时间:2015-01-12 03:13:38

标签: java md5 decode encode

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

String data = "some......";

2.并使用MD5将其转换为字节:

byte [] result = MD5.toMD5(data);

3.现在我将其编码为String:

String encodeString = new String(result,"ISO-8895-1");

4.然后将其解码为字节:

byte [] decodeBytes = encodeString.getBytes("ISO-8859-1");

我的问题是: decodeBytes是否等于result

我的疑惑是Zero中是否会result,是否会导致 Step3 中的截断

如果让decodeBytes等于result有任何问题,并且如果我在Step1中限制String的数据类型,例如只允许字母和数字,则会问题可以避免吗?

1 个答案:

答案 0 :(得分:2)

如果ISO-8859-1是8位字符代码,则没有理由不将字节值解码为字符。虽然不包括65个代码点(用于控制字符),但String方法处理这些代码,好像ISO / IEC 6429中定义的conrols是该字符集的一部分。

舍入字节值0到255可以很好地工作,也可以使用byte []。

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" );
    }
}