簡體   English   中英

相當於Java中的MessageDigest的Objective C?

[英]Objective C equivalent of MessageDigest in Java?

我正在執行將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中使用什么?

像這樣:

#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;
}

我在stackoverflow.com中找到了一個支持SHA-256的蘋果框架。 Thx stackoverflow :)

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循環代碼的Objective C表達式?

for (byte b : bs)

PS:Chuck,非常感謝您的幫助。 謝謝。 :)

您需要OpenSSL庫。 有關示例,請參見使用openssl和C ++生成sha256的答案(標題為C ++,但OpenSSL只是基本的C庫)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM