iOS中特定字符串的SHA1

2 sha1 objective-c ios

根据我的要求:

  1. 输入字符串必须转换为字节值.
  2. 字符串的每个字符(16位值)必须转换为低8位.
  3. 然后在字节数组上计算Sha1.
  4. 生成的SHA-1将转换为40个字符的字符串.

我知道如何将字符串转换为SHA1,但剩下的部分对我来说有点暗淡.我已经能够完成最后两个步骤.

unsigned char digest[CC_SHA1_DIGEST_LENGTH];
NSData *dataString = [yourString dataUsingEncoding: NSUTF8StringEncoding]; 

if (CC_SHA1([dataString bytes], [dataString length], digest)) {
   //Sha1 is calculated & stored in digest.
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Abh*_*ngh 11

我已经创建了这个功能,可以根据您的要求正常工作.你只需要输入一个字符串.

#import <CommonCrypto/CommonDigest.h>

- (NSString *)calculateSHA:(NSString *)yourString
{
    const char *ptr = [yourString UTF8String];

    int i =0;
    int len = strlen(ptr);
    Byte byteArray[len];
    while (i!=len)
    {
        unsigned eachChar = *(ptr + i);
        unsigned low8Bits = eachChar & 0xFF;

        byteArray[i] = low8Bits;
        i++;
    }


    unsigned char digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(byteArray, len, digest);

    NSMutableString *hex = [NSMutableString string];
    for (int i=0; i<20; i++)
        [hex appendFormat:@"%02x", digest[i]];

    NSString *immutableHex = [NSString stringWithString:hex];

    return immutableHex;
}
Run Code Online (Sandbox Code Playgroud)

然后你只需要调用上面的方法.

[self calculateSHA:yourString];
Run Code Online (Sandbox Code Playgroud)