8

Java コードを Objective C に変換する作業を行っています。

これは、変換する必要がある Java のコードです。

private String getHash(String input) 
{
    String ret = null;
    try 
    {
        MessageDigest md = MessageDigest.getInstance("SHA-256");

        byte[] bs = md.digest(input.getBytes("US-ASCII"));


        StringBuffer sb = new StringBuffer();
        for (byte b : bs) 
        {
            String bt = Integer.toHexString(b & 0xff);
            if(bt.length()==1) 
            {
                sb.append("0");
            }
            sb.append(bt);
        }
        ret = sb.toString();
    } 
    catch (Exception e) 
    {
    }
    return ret;
}

MessageDigest具体的には、クラスと同じ機能を持つ Objective C で何を使用できますか?

4

3 に答える 3

3

このようなもの:

#import <CommonCrypto/CommonDigest.h>

+(NSString*) sha256:(NSString *)input
{
    const char *s=[input 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;
}
于 2014-05-12T11:52:58.190 に答える
2

stackoverflow.comでSHA-256をサポートするアップルフレームワークを見つけました。Thxスタックオーバーフロー:)

CommonCrypto / CommonDigest.h

そして私はこの関数を使用できることに気づきました:

CC_SHA256(const void *data, CC_LONG len, unsigned char *md)

CC_SHA256_Final(unsigned char *md, CC_SHA256_CTX *c)

CC_SHA256_Init(CC_SHA256_CTX *c)

CC_SHA256_Update(CC_SHA256_CTX *c, const void *data, CC_LONG len)

したがって、このJavaコード以外のタスクを続行できます。

byte[] bs = md.digest(input.getBytes("US-ASCII"));

以下のJava循環コードのObjectiveC式を知りたいですか?

for (byte b : bs)

PS:チャック、私はあなたの助けに本当に感謝しています。ありがとうございました。:)

于 2011-12-30T02:22:53.517 に答える
0

OpenSSL ライブラリが必要です。例については、 openssl と C++ で sha256を生成するための回答を参照してください(タイトルには C++ と書かれていますが、OpenSSL は単なる基本的な C ライブラリです)。

于 2011-12-29T23:58:26.320 に答える