用于假人的CRC32和MD5算法

时间:2009-12-16 12:47:21

标签: algorithm language-agnostic md5

我想自己实现CRC32和MD5算法,但我仍然试图围绕我在这个主题上发现的不同来源。有人可以帮助我找到一个资源,以简单的格式解释算法或发布不同步骤的项目符号列表,以便我可以尝试填写它们.TIA。

以下是各自的维基百科页面。我理解正在做的部分,但按位操作是我遇到的困难。那和数学不是我的强项。

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

3 个答案:

答案 0 :(得分:2)

关于MD5的RFC-1321 spec还包含对算法的详细解释。关于CRC的Wiki文章非常清楚。

毕竟,你的主要问题显然是对二进制系统和按位运算符的无知。以下是关于二元系统和涉及的运算符的几个优秀指南:

这必须让你开始。

编辑:如果您想要自己创建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 :(得分:1)

根据DRY你应该做

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等会发生什么,你应该参加一个安全课程,我试过但失败了:(祝你好运!

答案 2 :(得分:0)

对于那些感兴趣的人,第一个链接是md5上的rfc文档。第二个是下载Java实现的链接:

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

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