Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iphone SDK:如何将字符串转换为SHA-1,将SHA-1转换为Base64?(用于安全)_Iphone_String_Base64_Sha1 - Fatal编程技术网

iphone SDK:如何将字符串转换为SHA-1,将SHA-1转换为Base64?(用于安全)

iphone 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

我只有转换代码,但它将字符串转换为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];

    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标准。