CRC32 и MD5 алгоритмы для чайников - PullRequest
2 голосов
/ 16 декабря 2009

Я хотел бы реализовать алгоритмы CRC32 и MD5 самостоятельно, но я все еще пытаюсь обернуть голову вокруг различных источников, которые я нашел по этому вопросу. Может ли кто-нибудь помочь мне указать ресурс, который объясняет алгоритмы в простом формате, или опубликовать список с перечнем различных шагов, чтобы я мог попытаться заполнить их. TIA.

Вот соответствующие страницы википедии на каждой. Я понимаю часть того, что делается, но с побитовыми операциями я сталкиваюсь с трудностями. Это и математика не моя сильная сторона.

http://en.wikipedia.org/wiki/Cyclic_redundancy_check
http://en.wikipedia.org/wiki/MD5

Ответы [ 3 ]

2 голосов
/ 16 декабря 2009

Спецификация RFC-1321 о MD5 также содержит подробное объяснение алгоритма. Статья в Вики о CRC достаточно ясна.

В конце концов, вашей главной проблемой, по-видимому, является незнание двоичной системы и побитовых операторов. Вот несколько превосходных руководств о бинарной системе и задействованных операторах:

Это должно помочь вам начать.

Редактировать : если реальная причина, по которой вы хотели создать доменную функцию MD5, заключается в том, что вы не можете найти существующую функцию в Java, то этот фрагмент кода может оказаться полезным:

/**
 * Generate MD5 hash for the given String.
 * @param string The String to generate the MD5 hash for.
 * @return The 32-char hexadecimal MD5 hash of the given String.
 */
public static String hashMD5(String string) {
    byte[] hash;

    try {
        hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
    } catch (NoSuchAlgorithmException e) {
        // Unexpected exception. "MD5" is just hardcoded and supported.
        throw new RuntimeException("MD5 should be supported?", e);
    } catch (UnsupportedEncodingException e) {
        // Unexpected exception. "UTF-8" is just hardcoded and supported.
        throw new RuntimeException("UTF-8 should be supported?", e);
    }

    StringBuilder hex = new StringBuilder(hash.length * 2);
    for (byte b : hash) {
        if ((b & 0xff) < 0x10) hex.append("0");
        hex.append(Integer.toHexString(b & 0xff));
    }
    return hex.toString();
}
1 голос
/ 16 декабря 2009

Согласно СУХОЙ вам следует сделать

final public class Security {

    synchronized public static String MD5(String msg) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(msg.getBytes());
            byte[] digest = md.digest();
            return new BigInteger(1, digest).toString(16);
        } catch (NoSuchAlgorithmException ex) {
            return "" + msg.hashCode();
        }
    }
}

но если вы действительно хотите выяснить, что происходит с md5 / sha1 и т. Д., Вам, вероятно, следует пройти курс безопасности, который я пробовал, но не получилось :( удачи вам!

0 голосов
/ 11 января 2011

Для тех, кто заинтересован, первая ссылка - это документ rfc на md5. Вторая ссылка для загрузки реализации для Java:

http://www.ietf.org/rfc/rfc1321.txt

http://www.freevbcode.com/ShowCode.Asp?ID=741

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...