![](/img/trans.png)
[英]Converting toHexString and MessageDigest in Java to c# equivalent
[英]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.