跨端使用MD5的两种编码方案总结

使用UTF8编码进行MD5计算

  • 前端MD5计算代码

    <script src="cryptojs_v3.1.2/components/core.js" type="text/javascript" charset="utf-8"></script>
    <script src="cryptojs_v3.1.2/components/md5.js" type="text/javascript" charset="utf-8"></script>
    var md5= CryptoJS.MD5("90AZaz.,=哈喽"); 
    //result: 2dee0c28bee6b2e081703cf3c8aa1bea
    

    或者

    <script src="cryptojs_v3.1.2/rollups/md5.js" type="text/javascript" charset="utf-8"></script>
    var md5= CryptoJS.MD5("90AZaz.,=哈喽"); 
    //result: 2dee0c28bee6b2e081703cf3c8aa1bea
    

  • 后端MD5计算代码(C#版)

        public static string ToMd5(this string data)
        {
            var bytes = System.Text.Encoding.UTF8.GetBytes(data);
            var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            var md5Bytes = md5.ComputeHash(bytes);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < md5Bytes.Length; i++)
            {
                sb.Append(md5Bytes[i].ToString("x2"));
            }
            return sb.ToString();
        }
        var s = "90AZaz.,=哈喽";
        var result = s.ToMd5();
        // result: 2dee0c28bee6b2e081703cf3c8aa1bea
    

  • T-SQL中MD5计算

        --T-SQL不支持UTF8格式字符串
    

使用UTF16编码进行MD5计算

  • 前端MD5计算代码

    <script src="cryptojs_v3.1.2/components/core.js" type="text/javascript" charset="utf-8"></script>
    <script src="cryptojs_v3.1.2/components/enc-utf16.js" type="text/javascript" charset="utf-8"></script>
    <script src="cryptojs_v3.1.2/components/md5.js" type="text/javascript" charset="utf-8"></script>
    var md5= CryptoJS.MD5(CryptoJS.enc.Utf16LE.parse("90AZaz.,=哈喽"));
    //result: 840556163aff1e6e7d8e586d453ecdae
    

  • 后端MD5计算代码(C#版)

        public static string ToMd5(this string data)
        {
            //.net中的unicode等价于utf-16,UTF-16<=>UTF-16LE,常见的编码如下:
            // 代码页,编码
            // 65000,UTF-7
            // 65001,UTF-8
            // 1200, UTF-16
            // 1201, UTF-16BE
            // 12000,UTF-32
            // 12001,UTF-32BE
            //所以,System.Text.Encoding.Unicode <=> System.Text.Encoding.GetEncoding(1200)
            //同理,System.Text.Encoding.UTF8 <=> System.Text.Encoding.GetEncoding(65001)
            var bytes = System.Text.Encoding.Unicode.GetBytes(data);
            var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            var md5Bytes = md5.ComputeHash(bytes);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < md5Bytes.Length; i++)
            {
                sb.Append(md5Bytes[i].ToString("x2"));
            }
            return sb.ToString();
        }
        var s = "90AZaz.,=哈喽";
        var result = s.ToMd5();
        // result: 840556163aff1e6e7d8e586d453ecdae
    

  • T-SQL中MD5计算

    SELECT SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES( MD5 , N 90AZaz.,=哈喽 )), 3, 32)
    -- result: 840556163aff1e6e7d8e586d453ecdae
    

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...