.NET VS目标C SHA-512不匹配不匹配、目标、VS、NET

2023-09-04 01:18:25 作者:至少还有你陪我到最后

我想写功能,从.NET函数是

目标创造SHA512字符串

 公共静态字符串GetSHA512(字符串strPlain)
{
    统一codeEncoding UE =新的统一codeEncoding();
    byte []的散列值= NULL;
    byte []的MessageBytes = UE.GetBytes(strPlain);
    System.Security.Cryptography.SHA512Managed SHhash =新System.Security.Cryptography.SHA512Managed();
    字符串strHex =的String.Empty;

    散列值= SHhash.ComputeHash(MessageBytes);
    的foreach(在散列值BYTE B)
    {
        strHex + =的String.Format({0:X2},B);
    }
    返回strHex;
}
 

这给出的结果

 输入:pass123
输出: 2a6353744cc2914c602265f50d2e413d0561368775756392517abb340ef75d52ee0c5d3623ddd1826fd768a13dca8961f5957c75df0d793b9d7537aabe050705
 

我已经试过是如下

   - (的NSString *)createSHA512:(的NSString *)的字符串
{
    为const char * CSTR = [字符串cStringUsingEncoding:NSUTF8StringEncoding]。
    的NSData *数据= [NSData的dataWithBytes:CSTR长度:string.length减]
    uint8_t有消化[CC_SHA512_DIGEST_LENGTH]
    CC_SHA512(data.bytes,data.length,消化);
    的NSMutableString *输出=的NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH]。

    的for(int i = 0; I< CC_SHA512_DIGEST_LENGTH;我++)
        [输出appendFormat:@%02X,消化[I]];
    返回输出;
}
 
VS出现目标包.NETFramework的目标包没有安装

这给下面

结果

 输入:pass123
输出: fd37ca5ca8763ae077a5e9740212319591603c42a08a60dcc91d12e7e457b024f6bdfdc10cdc1383e1602ff2092b4bc1bb8cac9306a9965eb352435f5dfe8bb0
 

任何人都可以请建议我究竟做错了什么?

为什么这两个值不同?

请纠正我的错误。

修改

平均值,而我试图改变编码 NSUTF16StringEncoding NSUni codeStringEncoding 这结果还是不同的,因为如下

 输入:pass123
输出: 514331e3f7ca0a295539347ebccc4e4f095fe5f3c1df10d43b4d550144c7b30ba9507831893ea63ea22e62e993be529b0d14be7800a90aa0de199d6be62a5f1b
 

解决方案

试错的功能一点,搜索compitable版本编码这里找到帮我解决问题。

在功能转换为const char是不使用默认的方法提供必要的,这样去除,并直接转换后的字符串数据。

   - (的NSString *)createSHA512:(的NSString *)字符串{
    的NSData *数据= [字符串dataUsingEncoding:NSUTF16LittleEndianStringEncoding]。
    uint8_t有消化[CC_SHA512_DIGEST_LENGTH]
    CC_SHA512(data.bytes,data.length,消化);
    的NSMutableString *输出=的NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH]。

    的for(int i = 0; I< CC_SHA512_DIGEST_LENGTH;我++)
        [输出appendFormat:@%02X,消化[I]];
    返回输出;
}
 

I am trying to write function for creating sha512 string in objective from .net function which is

public static string GetSHA512(string strPlain)
{
    UnicodeEncoding UE = new UnicodeEncoding();
    byte[] HashValue = null;
    byte[] MessageBytes = UE.GetBytes(strPlain);
    System.Security.Cryptography.SHA512Managed SHhash = new System.Security.Cryptography.SHA512Managed();
    string strHex = string.Empty;

    HashValue = SHhash.ComputeHash(MessageBytes);
    foreach (byte b in HashValue)
    {
        strHex += String.Format("{0:x2}", b);
    }
    return strHex;
}

This gives result as

input : pass123
output: 2a6353744cc2914c602265f50d2e413d0561368775756392517abb340ef75d52ee0c5d3623ddd1826fd768a13dca8961f5957c75df0d793b9d7537aabe050705

What I have tried is as follow

-(NSString *)createSHA512:(NSString *)string
{
    const char *cstr = [string cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:string.length];
    uint8_t digest[CC_SHA512_DIGEST_LENGTH];
    CC_SHA512(data.bytes, data.length, digest);
    NSMutableString* output = [NSMutableString  stringWithCapacity:CC_SHA512_DIGEST_LENGTH];

    for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    return output;
}

which gives result below

input : pass123
output: fd37ca5ca8763ae077a5e9740212319591603c42a08a60dcc91d12e7e457b024f6bdfdc10cdc1383e1602ff2092b4bc1bb8cac9306a9965eb352435f5dfe8bb0

Can anyone please suggest what am I doing wrong ?

Why these two values differ ?

Please correct my mistakes.

EDIT

Mean While I have tried changing encoding to NSUTF16StringEncoding and NSUnicodeStringEncoding which results still different and as follows

input : pass123
output: 514331e3f7ca0a295539347ebccc4e4f095fe5f3c1df10d43b4d550144c7b30ba9507831893ea63ea22e62e993be529b0d14be7800a90aa0de199d6be62a5f1b

解决方案

Little bit of trial and error in function and searching for compitable version of encoding found here help me to resolve problem.

In function conversion to const char was not necessary so removed and directly converted string to data using default method available.

-(NSString *)createSHA512:(NSString *)string {
    NSData *data = [string dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
    uint8_t digest[CC_SHA512_DIGEST_LENGTH];
    CC_SHA512(data.bytes, data.length, digest);
    NSMutableString* output = [NSMutableString  stringWithCapacity:CC_SHA512_DIGEST_LENGTH];

    for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    return output;
}