Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C中的字符串和uinteger创建哈希#_C#_Actionscript 3_Hash_Md5 - Fatal编程技术网

C# 从C中的字符串和uinteger创建哈希#

C# 从C中的字符串和uinteger创建哈希#,c#,actionscript-3,hash,md5,C#,Actionscript 3,Hash,Md5,我需要从如下代码中的字符串创建哈希: private static function core_md5(_arg_1:Array, _arg_2:uint):Array{ var _local_8:uint; var _local_9:uint; var _local_10:uint; var _local_11:uint; _arg_1[(_arg_2 >> 5)] = (_arg_1[(_arg_2 >> 5)] | (128

我需要从如下代码中的字符串创建哈希:

private static function core_md5(_arg_1:Array, _arg_2:uint):Array{
    var _local_8:uint;
    var _local_9:uint;
    var _local_10:uint;
    var _local_11:uint;
    _arg_1[(_arg_2 >> 5)] = (_arg_1[(_arg_2 >> 5)] | (128 << (_arg_2 % 32)));
    _arg_1[((((_arg_2 + 64) >>> 9) << 4) + 14)] = _arg_2;
    var _local_3:uint = 1732584193;
    var _local_4:uint = 4023233417;
    var _local_5:uint = 2562383102;
    var _local_6:uint = 271733878;
    var _local_7:uint;
    while (_local_7 < _arg_1.length) {
        _arg_1[_local_7] = ((_arg_1[_local_7]) || (0));
        _arg_1[(_local_7 + 1)] = ((_arg_1[(_local_7 + 1)]) || (0));
        _arg_1[(_local_7 + 2)] = ((_arg_1[(_local_7 + 2)]) || (0));
        _arg_1[(_local_7 + 3)] = ((_arg_1[(_local_7 + 3)]) || (0));
        _arg_1[(_local_7 + 4)] = ((_arg_1[(_local_7 + 4)]) || (0));
        _arg_1[(_local_7 + 5)] = ((_arg_1[(_local_7 + 5)]) || (0));
        _arg_1[(_local_7 + 6)] = ((_arg_1[(_local_7 + 6)]) || (0));
        _arg_1[(_local_7 + 7)] = ((_arg_1[(_local_7 + 7)]) || (0));
        _arg_1[(_local_7 + 8)] = ((_arg_1[(_local_7 + 8)]) || (0));
        _arg_1[(_local_7 + 9)] = ((_arg_1[(_local_7 + 9)]) || (0));
        _arg_1[(_local_7 + 10)] = ((_arg_1[(_local_7 + 10)]) || (0));
        _arg_1[(_local_7 + 11)] = ((_arg_1[(_local_7 + 11)]) || (0));
        _arg_1[(_local_7 + 12)] = ((_arg_1[(_local_7 + 12)]) || (0));
        _arg_1[(_local_7 + 13)] = ((_arg_1[(_local_7 + 13)]) || (0));
        _arg_1[(_local_7 + 14)] = ((_arg_1[(_local_7 + 14)]) || (0));
        _arg_1[(_local_7 + 15)] = ((_arg_1[(_local_7 + 15)]) || (0));
        _local_8 = _local_3;
        _local_9 = _local_4;
        _local_10 = _local_5;
        _local_11 = _local_6;
        _local_3 = ff(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 0)], 7, 3614090360);
        _local_6 = ff(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 1)], 12, 3905402710);
        _local_5 = ff(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 2)], 17, 606105819);
        _local_4 = ff(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 3)], 22, 3250441966);
        _local_3 = ff(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 4)], 7, 4118548399);
        _local_6 = ff(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 5)], 12, 1200080426);
        _local_5 = ff(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 6)], 17, 2821735955);
        _local_4 = ff(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 7)], 22, 4249261313);
        _local_3 = ff(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 8)], 7, 1770035416);
        _local_6 = ff(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 9)], 12, 2336552879);
        _local_5 = ff(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 10)], 17, 0xFFFF5BB1);
        _local_4 = ff(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 11)], 22, 2304563134);
        _local_3 = ff(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 12)], 7, 1804603682);
        _local_6 = ff(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 13)], 12, 4254626195);
        _local_5 = ff(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 14)], 17, 2792965006);
        _local_4 = ff(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 15)], 22, 1236535329);
        _local_3 = gg(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 1)], 5, 4129170786);
        _local_6 = gg(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 6)], 9, 3225465664);
        _local_5 = gg(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 11)], 14, 643717713);
        _local_4 = gg(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 0)], 20, 3921069994);
        _local_3 = gg(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 5)], 5, 3593408605);
        _local_6 = gg(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 10)], 9, 38016083);
        _local_5 = gg(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 15)], 14, 3634488961);
        _local_4 = gg(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 4)], 20, 3889429448);
        _local_3 = gg(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 9)], 5, 568446438);
        _local_6 = gg(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 14)], 9, 3275163606);
        _local_5 = gg(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 3)], 14, 4107603335);
        _local_4 = gg(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 8)], 20, 1163531501);
        _local_3 = gg(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 13)], 5, 2850285829);
        _local_6 = gg(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 2)], 9, 4243563512);
        _local_5 = gg(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 7)], 14, 1735328473);
        _local_4 = gg(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 12)], 20, 2368359562);
        _local_3 = hh(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 5)], 4, 4294588738);
        _local_6 = hh(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 8)], 11, 2272392833);
        _local_5 = hh(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 11)], 16, 1839030562);
        _local_4 = hh(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 14)], 23, 4259657740);
        _local_3 = hh(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 1)], 4, 2763975236);
        _local_6 = hh(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 4)], 11, 1272893353);
        _local_5 = hh(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 7)], 16, 4139469664);
        _local_4 = hh(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 10)], 23, 3200236656);
        _local_3 = hh(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 13)], 4, 681279174);
        _local_6 = hh(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 0)], 11, 3936430074);
        _local_5 = hh(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 3)], 16, 3572445317);
        _local_4 = hh(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 6)], 23, 76029189);
        _local_3 = hh(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 9)], 4, 3654602809);
        _local_6 = hh(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 12)], 11, 3873151461);
        _local_5 = hh(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 15)], 16, 530742520);
        _local_4 = hh(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 2)], 23, 3299628645);
        _local_3 = ii(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 0)], 6, 4096336452);
        _local_6 = ii(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 7)], 10, 1126891415);
        _local_5 = ii(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 14)], 15, 2878612391);
        _local_4 = ii(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 5)], 21, 4237533241);
        _local_3 = ii(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 12)], 6, 1700485571);
        _local_6 = ii(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 3)], 10, 2399980690);
        _local_5 = ii(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 10)], 15, 4293915773);
        _local_4 = ii(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 1)], 21, 2240044497);
        _local_3 = ii(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 8)], 6, 1873313359);
        _local_6 = ii(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 15)], 10, 4264355552);
        _local_5 = ii(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 6)], 15, 2734768916);
        _local_4 = ii(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 13)], 21, 1309151649);
        _local_3 = ii(_local_3, _local_4, _local_5, _local_6, _arg_1[(_local_7 + 4)], 6, 4149444226);
        _local_6 = ii(_local_6, _local_3, _local_4, _local_5, _arg_1[(_local_7 + 11)], 10, 3174756917);
        _local_5 = ii(_local_5, _local_6, _local_3, _local_4, _arg_1[(_local_7 + 2)], 15, 718787259);
        _local_4 = ii(_local_4, _local_5, _local_6, _local_3, _arg_1[(_local_7 + 9)], 21, 3951481745);
        _local_3 = (_local_3 + _local_8);
        _local_4 = (_local_4 + _local_9);
        _local_5 = (_local_5 + _local_10);
        _local_6 = (_local_6 + _local_11);
        _local_7 = (_local_7 + 16);
    };
    return ([_local_3, _local_4, _local_5, _local_6]);
}

private static function rol(_arg_1:uint, _arg_2:uint):uint{
    return (((_arg_1 << _arg_2) | (_arg_1 >>> (32 - _arg_2))));
}

private static function cmn(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint):uint{
    return ((rol((((_arg_2 + _arg_1) + _arg_4) + _arg_6), _arg_5) + _arg_3));
}

private static function ff(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint, _arg_7:uint):uint{
    return (cmn(((_arg_2 & _arg_3) | (~(_arg_2) & _arg_4)), _arg_1, _arg_2, _arg_5, _arg_6, _arg_7));
}

private static function gg(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint, _arg_7:uint):uint{
    return (cmn(((_arg_2 & _arg_4) | (_arg_3 & ~(_arg_4))), _arg_1, _arg_2, _arg_5, _arg_6, _arg_7));
}

private static function hh(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint, _arg_7:uint):uint{
    return (cmn(((_arg_2 ^ _arg_3) ^ _arg_4), _arg_1, _arg_2, _arg_5, _arg_6, _arg_7));
}

private static function ii(_arg_1:uint, _arg_2:uint, _arg_3:uint, _arg_4:uint, _arg_5:uint, _arg_6:uint, _arg_7:uint):uint{
    return (cmn((_arg_3 ^ (_arg_2 | ~(_arg_4))), _arg_1, _arg_2, _arg_5, _arg_6, _arg_7));
}
private静态函数core\u md5(\u arg\u 1:Array,\u arg\u 2:uint):Array{
局部变量8:uint;
局部变量9:uint;
局部变量10:uint;
局部变量11:uint;
_arg_1[(arg_2>>5)]=(arg_1[(arg_2>>5)](128>>9)>(32-(arg_2));
}
私有静态函数cmn(_arg_1:uint,_arg_2:uint,_arg_3:uint,_arg_4:uint,_arg_5:uint,_arg_6:uint):uint{
返回((rol)(((((((arg_2+)+(arg_1)+arg_4)+arg_6),(arg_5)+arg_3));
}
私有静态函数ff(_arg_1:uint,_arg_2:uint,_arg_3:uint,_arg_4:uint,_arg_5:uint,_arg_6:uint,_arg_7:uint):uint{
返回值(cmn(((((();
}
私有静态函数gg(_arg_1:uint,_arg_2:uint,_arg_3:uint,_arg_4:uint,_arg_5:uint,_arg_6:uint,_arg_7:uint):uint{
返回值(cmn((((();
}
私有静态函数hh(_arg_1:uint,_arg_2:uint,_arg_3:uint,_arg_4:uint,_arg_5:uint,_arg_6:uint,_arg_7:uint):uint{
返回值(cmn(((((参数2^参数3)^参数4),(参数1,参数2,参数5,参数6,参数7));
}
私有静态函数ii(_arg_1:uint,_arg_2:uint,_arg_3:uint,_arg_4:uint,_arg_5:uint,_arg_6:uint,_arg_7:uint):uint{
返回值(cmn(((((();
}
但我在Framework.NET中找不到接受参数字符串和uinteger/integer的函数

HashAlgorithm.ComputeHash是否与此函数具有相同的功能

你能帮我吗


诚恳地

以下是一个你如何实现目标的例子:

static byte[] HashMd5(string text, int value)
{
    using (MemoryStream stream = new MemoryStream())
    using (BinaryWriter writer = new BinaryWriter(stream))
    using (System.Security.Cryptography.HashAlgorithm hash =
        new System.Security.Cryptography.MD5Cng())
    {
        writer.Write(text);
        writer.Write(value);
        writer.Flush();

        stream.Position = 0;

        return hash.ComputeHash(stream);
    }
}
如果您只需要一些散列,那么上面的内容应该适用于任何场景

然而,有很多选择;散列通常用于与先前计算的值进行比较,在将散列与先前计算的值进行比较的场景中,您需要确保数据的编码始终完全相同。在上述情况下,必须牢记以下几点:

  • C#
    字符串
    对象使用UTF8的
    二进制编写器
    的默认值进行编码
  • C#
    int
    值以小尾端格式编码为四个字节

在.NET中,如果您总是使用我所展示的代码,它将始终生成相同的哈希值。如果您必须在其他环境中重新计算哈希,则该环境可能具有不同的默认值或编码规则(例如,将其文本转换为UTF8),您必须确保以完全相同的方式完成。任何MD5算法都会为完全相同的输入字节生成完全相同的结果,但您确实需要确保输入字节是正确的(尤其是与哈希相同数据的任何其他位置相同)。

您确实需要MD5哈希吗。NET有一个完美的MD5实现。MD5对字节进行散列,因此您可以按自己认为合适的方式序列化数据(例如,将字符串写入UTF16,将整数写入其4字节表示,以任意顺序),然后将生成的字节传递给MD5算法进行散列。谢谢,是的,我需要MD5散列,我会尝试。