iPhone SDK:我如何将一个字符串转换SHA-1和SHA-1为Base64? (对于WSSecurity) [英] iphone SDK : How Can I Convert a string to SHA-1 And SHA-1 to Base64? (for WSSecurity)

查看:151
本文介绍了iPhone SDK:我如何将一个字符串转换SHA-1和SHA-1为Base64? (对于WSSecurity)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的转换code是我的全部,但它的字符串转换为SHA-1,以十六进制格式。我怎么可以转换SHA-1为base64?

   - (的NSString *)摘要:(* NSString的)输入    INT I;    为const char * CSTR = [输入cStringUsingEncoding:NSUTF8StringEncoding];
    NSData的*数据= [NSData的dataWithBytes:CSTR长度:input.length];    uint8_t有消化[CC_SHA1_DIGEST_LENGTH]    CC_SHA1(data.bytes,data.length,消化);    输出= [的NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
                                                     长度:CC_SHA1_DIGEST_LENGTH];    对于(i = 0; I< CC_SHA1_DIGEST_LENGTH;我++)
    {
        [输出appendFormat:@%02X,摘要[I]];
    }
    返回输出;
}


解决方案

有没有内置在iOS中的散列或Base64。你必须推出自己的。查找C实现SHA1在谷歌的;为Base64的,我有一个给你:

 的NSString * ToBase64(NSData的* D)
{
    静态为const char ALPHABET [] =ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /;
    静态常量的NSString * PAD1 = @=* PAD2 = @==;    INT L = [Ð长度]
    无符号的char * p =(无符号字符*)[d字节]
    为unichar [4]块;
    的NSMutableString * S = [的NSMutableString stringWithCapacity:(1 + 3)* 4/3];
    INT I;
    INT MOD = 1%3;
    INT LL = L - 模;
    无符号整型黑社会;
    * NSString的雄克;
    对于(i = 0; I< LL; I + = 3)
    {
        三元=(对[1] - ;&下; 16)| (对第[i + 1];&下; 8)| P [I + 2];
        块[0] = ALPHABET [(黑社会>> 18)及0x3F的];
        块[1] =字母表[(三元>> 12)及0x3F的];
        块[2] =字母表[(三元>→6)及0x3F的];
        块[3] = ALPHABET [黑社会&安培; 0x3F的];
        雄克= [[NSString的页头] initWithCharacters:块长度:4];
        [S appendString:雄克]
        [崇德发布]
    }
    如果(MOD == 1)
    {
        块[0] =字母表[(对[I]≥→2)及0x3F的];
        块[1] =字母表[(对[1] - ; 4;)及0x3F的];
        雄克= [[NSString的页头] initWithCharacters:块长度:2];
        [S appendString:雄克]
        [崇德发布]
        [S appendString:PAD2];
    }
    如果(模== 2)
    {
        三元=(对[1] - ;&下; 8)| P [I + 1];
        块[0] =字母表[(三元>大于10)及0x3F的];
        块[1] = ALPHABET [(黑社会>> 4)及0x3F的];
        块[2] =字母表[(三元&下; 2)及0x3F的];
        雄克= [[NSString的页头] initWithCharacters:块长度:3];
        [S appendString:雄克]
        [崇德发布]
        [S appendString:PAD1];
    }
    返回S;
}

my convert code is all i have, but it converts a string to sha-1 to hex format. how can i convert sha-1 to 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;
}

解决方案

There's no built-in hashing or Base64 in iOS. You'll have to roll your own. Find a C implementation of SHA1 in Google; as for Base64, I've got one for you:

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

这篇关于iPhone SDK:我如何将一个字符串转换SHA-1和SHA-1为Base64? (对于WSSecurity)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆