12

重複の可能性:
iPhone の Objective-C の Sha256

ご挨拶、

Objective C で SHA256 文字列を生成するのにひどい問題があります (おそらく、この言語に慣れていないためです)。

jQueryでは、私がしなければならないのはこれだけです:

var sha256String=$.sha256("Hello");

これにより、期待どおりにハッシュが生成されます。

しかし、Objective-C では、次のことを試してみましたが、役に立ちませんでした。

NSString *pword=[[NSString alloc]
initWithString:login_pword.text];
unsigned char result[64];
CC_SHA256([pword UTF8String], [pword lengthOfBytesUsingEncoding:NSASCIIStringEncoding],result);
UIAlertView *msg=[[UIAlertView alloc] initWithTitle:@"Hi" message:result delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[msg show];
[msg release];

次のような関数を呼び出すことができますか?

NSString *sha256String=[self getSHA256:pword];

これは私が作成しようとしているもので、非常に難しいと感じています。

誰かが助けてくれることを願っています。

よろしくお願いします。

4

3 に答える 3

56

今日いろいろ遊んだ後、SHA256 を取得する関数を思いつきました。

-(NSString*) sha256:(NSString *)clear{
    const char *s=[clear cStringUsingEncoding:NSASCIIStringEncoding];
    NSData *keyData=[NSData dataWithBytes:s length:strlen(s)];

    uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0};
    CC_SHA256(keyData.bytes, keyData.length, digest);
    NSData *out=[NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
    NSString *hash=[out description];
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
    return hash;
}

これにより、PHP と同じ出力が得られます。SHA1 に簡単に変換できます。'SHA256' を 'SHA1' に変更するだけです。

それが誰かを助けることを願っています。

于 2011-02-14T18:44:48.977 に答える
3

のメソッドに渡しresultています。は であり、 が期待されます。に変換する必要があります。UIAlertViewinitresultchar[]UIAlertViewNSString*char[]NSString *

これを試して:

NSString *resultString = [NSString stringWithCString:result encoding:NSASCIIStringEncoding];
UIAlertView *msg=[[UIAlertView alloc] initWithTitle:@"Hi" message:resultString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

iPhone でのハッシュに関するこの記事も参照してください。

于 2011-02-14T12:32:45.113 に答える
1

OpenSSL C 関数を使用する必要があります。たとえば、これを行う方法についてのこの質問を参照してください。入力文字列として[myString UTFString]、 length とともに使用します[myString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]

于 2011-02-14T12:32:04.733 に答える