iphone SDK:如何将字符串转换为SHA-1,将SHA-1转换为Base64?(用于安全)
我只有转换代码,但它将字符串转换为sha-1格式和十六进制格式。如何将sha-1转换为base64iphone SDK:如何将字符串转换为SHA-1,将SHA-1转换为Base64?(用于安全),iphone,string,base64,sha1,Iphone,String,Base64,Sha1,我只有转换代码,但它将字符串转换为sha-1格式和十六进制格式。如何将sha-1转换为base64 -(NSString *)digest:(NSString*)input int i; const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding]; NSData *data = [NSData dataWithBytes:cstr length:input.length]; uin
-(NSString *)digest:(NSString*)input
int i;
const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:input.length];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, digest);
output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
length:CC_SHA1_DIGEST_LENGTH];
for(i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
{
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
-(NSString*)摘要:(NSString*)输入
int i;
const char*cstr=[输入cStringUsingEncoding:NSUTF8StringEncoding];
NSData*data=[NSData dataWithBytes:cstr-length:input.length];
uint8_t摘要[抄送摘要长度];
CC_SHA1(data.bytes、data.length、digest);
输出=[NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH*2];
长度:CC_SHA1_DIGEST_length];
对于(i=0;i
iOS中没有内置的哈希或Base64。你得自己滚。在Google中找到SHA1的C实现;至于Base64,我有一个给你:
NSString *ToBase64(NSData *d)
{
static const char ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static const NSString *PAD1 = @"=", *PAD2 = @"==";
int l = [d length];
unsigned char *p = (unsigned char*)[d bytes];
unichar Chunk[4];
NSMutableString *s = [NSMutableString stringWithCapacity:(l+3)*4/3];
int i;
int mod = l % 3;
int ll = l - mod;
unsigned int triad;
NSString *sChunk;
for(i=0;i<ll;i+=3)
{
triad = (p[i]<<16) | (p[i+1]<<8) | p[i+2];
Chunk[0] = ALPHABET[(triad >> 18) & 0x3f];
Chunk[1] = ALPHABET[(triad >> 12) & 0x3f];
Chunk[2] = ALPHABET[(triad >> 6) & 0x3f];
Chunk[3] = ALPHABET[triad & 0x3f];
sChunk = [[NSString alloc] initWithCharacters:Chunk length:4];
[s appendString:sChunk];
[sChunk release];
}
if(mod == 1)
{
Chunk[0] = ALPHABET[(p[i] >> 2) & 0x3f];
Chunk[1] = ALPHABET[(p[i] << 4) & 0x3f];
sChunk = [[NSString alloc] initWithCharacters:Chunk length:2];
[s appendString:sChunk];
[sChunk release];
[s appendString: PAD2];
}
if(mod == 2)
{
triad = (p[i]<<8) | p[i+1];
Chunk[0] = ALPHABET[(triad >> 10) & 0x3f];
Chunk[1] = ALPHABET[(triad >> 4) & 0x3f];
Chunk[2] = ALPHABET[(triad << 2) & 0x3f];
sChunk = [[NSString alloc] initWithCharacters:Chunk length:3];
[s appendString:sChunk];
[sChunk release];
[s appendString: PAD1];
}
return s;
}
NSString*ToBase64(NSData*d)
{
静态常量字符字母[]=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyzo123456789+/”;
静态常量NSString*PAD1=@“=”,*PAD2=@“=”;
int l=[d长度];
无符号字符*p=(无符号字符*)[d字节];
unichar区块[4];
NSMutableString*s=[NSMutableString stringWithCapacity:(l+3)*4/3];
int i;
int mod=l%3;
int ll=l-mod;
无符号整数三元组;
NSString*sChunk;
对于(i=0;i>6)&0x3f];
块[3]=字母表[triad&0x3f];
sChunk=[[NSString alloc]initWithCharacters:块长度:4];
[s appendString:sChunk];
[舒克释放];
}
如果(mod==1)
{
块[0]=字母表[(p[i]>>2)&0x3f];
块[1]=字母表[(p[i]>4)&0x3f];
Chunk[2]=ALPHABET[(triad在iOS中没有内置哈希或Base64。你必须自己动手。在Google中找到SHA1的C实现;至于Base64,我为你准备了一个:
NSString *ToBase64(NSData *d)
{
static const char ALPHABET[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
static const NSString *PAD1 = @"=", *PAD2 = @"==";
int l = [d length];
unsigned char *p = (unsigned char*)[d bytes];
unichar Chunk[4];
NSMutableString *s = [NSMutableString stringWithCapacity:(l+3)*4/3];
int i;
int mod = l % 3;
int ll = l - mod;
unsigned int triad;
NSString *sChunk;
for(i=0;i<ll;i+=3)
{
triad = (p[i]<<16) | (p[i+1]<<8) | p[i+2];
Chunk[0] = ALPHABET[(triad >> 18) & 0x3f];
Chunk[1] = ALPHABET[(triad >> 12) & 0x3f];
Chunk[2] = ALPHABET[(triad >> 6) & 0x3f];
Chunk[3] = ALPHABET[triad & 0x3f];
sChunk = [[NSString alloc] initWithCharacters:Chunk length:4];
[s appendString:sChunk];
[sChunk release];
}
if(mod == 1)
{
Chunk[0] = ALPHABET[(p[i] >> 2) & 0x3f];
Chunk[1] = ALPHABET[(p[i] << 4) & 0x3f];
sChunk = [[NSString alloc] initWithCharacters:Chunk length:2];
[s appendString:sChunk];
[sChunk release];
[s appendString: PAD2];
}
if(mod == 2)
{
triad = (p[i]<<8) | p[i+1];
Chunk[0] = ALPHABET[(triad >> 10) & 0x3f];
Chunk[1] = ALPHABET[(triad >> 4) & 0x3f];
Chunk[2] = ALPHABET[(triad << 2) & 0x3f];
sChunk = [[NSString alloc] initWithCharacters:Chunk length:3];
[s appendString:sChunk];
[sChunk release];
[s appendString: PAD1];
}
return s;
}
NSString*ToBase64(NSData*d)
{
静态常量字符字母[]=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyzo123456789+/”;
静态常量NSString*PAD1=@“=”,*PAD2=@“=”;
int l=[d长度];
无符号字符*p=(无符号字符*)[d字节];
unichar区块[4];
NSMutableString*s=[NSMutableString stringWithCapacity:(l+3)*4/3];
int i;
int mod=l%3;
int ll=l-mod;
无符号整数三元组;
NSString*sChunk;
对于(i=0;i>6)&0x3f];
块[3]=字母表[triad&0x3f];
sChunk=[[NSString alloc]initWithCharacters:块长度:4];
[s appendString:sChunk];
[舒克释放];
}
如果(mod==1)
{
块[0]=字母表[(p[i]>>2)&0x3f];
块[1]=字母表[(p[i]>4)&0x3f];
块[2]=字母表[(triad是的,你是对的。C实现可能会帮助我..感谢回答commonCrypto库现在可供iOS用户使用。它提供多种哈希方法和编码,包括MD5和SHA1标准。是的,你是对的。C实现可能会帮助我..感谢回答commonCrypto库现在可供iOS用户使用。它提供了IDE提供了多种散列方法和编码,包括MD5和SHA1标准。