用不同的編碼編碼的兩個不同的字符串可以有相同的字節序列嗎?當使用兩種不同的編碼 (Cp1252和UTF-8僅僅是示例)進行編碼時,下面的例子中的一些「字符串1」和「字符串2」將導致測試通過?用不同的編碼編碼時,兩個不同的字符串可以具有相同的字節序列嗎?
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import org.junit.Assert;
import org.junit.Test;
public class EncodingTest {
@Test
public void test() throws UnsupportedEncodingException {
final byte[] sequence1 = "string one".getBytes("Cp1252");
final byte[] sequence2 = "string two".getBytes("UTF-8");
Assert.assertTrue(Arrays.equals(sequence1, sequence2));
}
}
在我的代碼中的錯誤散列從JVM的默認編碼字符串生成的字節序列,我需要驗證是否當代碼與不同的字符串和不同的JVM文件編碼運行,將導致哈希衝突(可例如,在Windows和Linux上運行時發生)。
由於編碼是字節序列和字符之間的映射,我認爲可能有一些字符串和編碼通過上述測試。但只是想知道是否有任何衆所周知的例子或一些很好的理由,爲什麼我不應該依賴沒有發生散列衝突。
感謝
PS:這僅僅是通過JDK 1.6支持的編碼,而不是由一些彌補的。
使用「默認編碼」往往是..懷疑。 – 2012-07-20 02:01:33
請注意,這個問題是要求*反*什麼答案是響應;如果兩個相同的**字符串具有不同的編碼可以生成相同的字節序列*,那麼它不是要求具有不同編碼的兩個**不同**字符串能夠生成相同的字節序列*。 (更具體地說,如果存在這種碰撞的「已知情況」)。 – 2012-07-20 02:03:29
爲什麼散列碰撞很重要?哈希碼不需要是唯一的。 – jtahlborn 2012-07-20 03:23:28