繁体   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