Если вам нужно выполнить много сравнений, вы можете сохранить значение MD5 в виде 2 long
целых чисел, таким образом вам нужно всего лишь выполнить не более 4 логических операций для проверки другого значения MD5.
В основном, предоставьте класс, который будет принимать входные данные, необработанные сводные данные как byte[]
и использовать
ByteBuffer bb = ByteBuffer.wrap(digestData);
long[] bits = new long[] {
bb.getLong(),
bb.getLong()
};
Сравните с другим long[]
массивом MD5 с
boolean eq = ((bits[0]^otherBits[0]) | (bits[1]^otherBits[1])) == 0);
РеконструкцияMD5 с
ByteBuffer bb = ByteBuffer.allocate(16);
bb.putLong(bits[0]);
bb.putLong(bits[1]);
byte[] digestData = new byte[16];
bb.get(digestData);
Примечание : я не предлагаю преобразовывать byte[]
в long[]
для каждого сравнения, это просто, как хранить дайджест для сравнений.Последний фрагмент реконструкции является необязательным, вы должны хранить данные как byte[]
и сравнивать только long[]
массивы.В базе данных сохраните данные как шестнадцатеричное 32-байтовое значение.