/ / Това осъществим ли е начинът да се сравнят две стойности на обект java, като се използва хеш md5? - java, json, сравнение, md5

Дали това е осъществим начин за сравняване на две стойности на java обект с помощта на md5 hash? - java, json, сравни, md5

Например, имам два обекта, които клас, Person.

Person A:
User_name:n1
Password:1234
Email:n1@email.com

Person B:
User_name:n1
Password:1234
Email:n1@email.com

Защото и Лицето А, и Лицето Б имат едно и същостойности, така че бих искал да напиша моя собствена функция isValueEqual. първо, искам да сравня класовете им, след това аз определям стойността им една по една, за да проверя дали е равна. Мисля, че този начин отнема много време. Така че, мисля, че това е надеждно, за да го превърнете в JSON низ и използвайте md5, за да ги хеширате, и сравнете само хеша. Така че, това ли е по-добър подход за сравняване на тяхната стойност? Благодаря.

Отговори:

2 за отговор № 1

Да обясня какво обяснява Джим Гарисън в товакоментирайте по-подробно, просто помислете за работата, необходима за внедряване на равни, като сравнявате полетата, и работата, необходима за прилагането му, като генерира хеш и сравнява хешовете. Нека вземем вашия пример, като A и B се различават само по последната буква от имейла им (което е най-лошият случай).

Първи метод:

  • повторете всички символи на имената и ги сравнете
  • повторете всички символи за парола и ги сравнете
  • повторете всички имейли и ги сравнете.

Втори метод:

  • създайте два нови StringBuilders
  • итерайте през всички символи за име, за да попълните името в низовете на JSON, и ги добавете към StringBuilder, заобиколен от кавички, със специални символи, избягали и т.н.
  • итерайте през всички символи за парола, за да попълните паролата в низовете на JSON и ги добавете към StringBuilder, заобиколен от кавички, със специални символи, избягали и т.н.
  • итерайте през всички имейли за попълване на имейла в низовете на JSON и ги добавете към StringBuilder, заобиколен от кавички, със специални символи, избягали и т.н.
  • трансформирайте StringBuilders в Strings
  • трансформирайте Strings в байтови масиви
  • приложете сложна криптографска функция и към двата байтови масива
  • итерация през всеки байтов масив и сравнение на байтовете.

Обърнете внимание, че ако лицата се различават по първия знак или дължината на името си, първият метод спира веднага, докато вторият трябва да прави всяка стъпка.


5 за отговор № 2

Не. Можете да срещнете a хашиш сблъсък и по този начин идентифицират два различни обекта като еднакви.

Какво отнема време за сравняване на полетата? Ако се притеснявате за времето за изчисляване, измерете го първо (много бих се изненадал, ако смятате, че е твърде бавно и хеш изчисленията ще бъдат масово по-бавни). Ако се притеснявате за времето за внедряване, проверете Apache Commons EqualsBuilder или подобни.


0 за отговор № 3

Функцията на хеш ви дава фалшив положителен резултат, така че е вероятно да ударите фалшиво съвпадение в крайна сметка.

Въпреки че, ако вашите обекти няма да изтощават MD5 и фалшивото съвпадение не ви притеснява, тогава със сигурност можете да отидете за MD5.


0 за отговор № 4

Нещо подобно е много по-бързо от преобразуването на обекта в JSON и след това изчисляването на неговия MD5

public boolean equals( Object o ) {
Person p = null;
return    o instanceof Person
&& this.name.equals((p = (Person) o).name)
&& this.password.equals(p.password)
&& this.email.equals(p.email);
}

Но, не ми вярвай, мери.