ISO-8859-1 能否正确编码 MD5 字节?
can ISO-8859-1 encode MD5 bytes correctly ?
1.There 是 String 中的一些数据:
String data = "some......";
2.And 使用 MD5 将其转换为字节:
byte [] result = MD5.toMD5(data);
3.Now 我把它编码成String:
String encodeString = new String(result,"ISO-8895-1");
4.And 然后将其解码为字节:
byte [] decodeBytes = encodeString.getBytes("ISO-8859-1");
我的问题是:decodeBytes
会等于 result
吗?
我的疑惑是result
中会不会有Zero
,会不会导致Step3中的截断 ?
如果让 decodeBytes
等于 result
有任何问题,并且如果我在步骤 1 中限制字符串的数据类型,例如只允许 字母和数字 ,这个问题可以避免吗?
如果 ISO-8859-1 是 8 位字符代码,则没有理由不将字节值解码为字符。尽管不包括 65 个代码点(用于控制字符),但 String 方法处理这些代码点时就好像 ISO/IEC 6429 中定义的控件是该字符集的一部分一样。
从 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" );
}
}
1.There 是 String 中的一些数据:
String data = "some......";
2.And 使用 MD5 将其转换为字节:
byte [] result = MD5.toMD5(data);
3.Now 我把它编码成String:
String encodeString = new String(result,"ISO-8895-1");
4.And 然后将其解码为字节:
byte [] decodeBytes = encodeString.getBytes("ISO-8859-1");
我的问题是:decodeBytes
会等于 result
吗?
我的疑惑是result
中会不会有Zero
,会不会导致Step3中的截断 ?
如果让 decodeBytes
等于 result
有任何问题,并且如果我在步骤 1 中限制字符串的数据类型,例如只允许 字母和数字 ,这个问题可以避免吗?
如果 ISO-8859-1 是 8 位字符代码,则没有理由不将字节值解码为字符。尽管不包括 65 个代码点(用于控制字符),但 String 方法处理这些代码点时就好像 ISO/IEC 6429 中定义的控件是该字符集的一部分一样。
从 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" );
}
}