开发者

Base64encoding for password field

开发者 https://www.devze.com 2023-04-10 18:43 出处:网络
I have POST HTTP request like this right now: NSString *post =[NSString stringWithFormat:@\"memberId=%@&pwd=%@\",txtUName.text,txtPwd.text];

I have POST HTTP request like this right now:

NSString *post =[NSString stringWithFormat:@"memberId=%@&pwd=%@",txtUName.text,txtPwd.text];

My question is, instead of sending password as a string, I want to Base64encode password field. I searched on the internet and I found following method. How do I call this method to encode my password? How do I change my post request here?

-(NSString *)Base64Encode:(NSData *)data{

 //Point to start of the data and set buffer sizes
    int inLength = [data length];
    int outLength = ((((inLength * 4)/3)/4)*4) + (((inLength * 4)/3)%4 ? 4 : 0);
    const char *inputBuffer = [data bytes];
    char *outputBuffer = malloc(outLength);
    outputBuffer[outLength] = 0;

    //64 digit code
    static char Encode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    //start the count
    int cycle = 0;
    int inpos = 0;
    int outpos = 0;
    char temp;

    //Pad the last to bytes, the outbuffer must always be a multiple of 4
    outputBuffer[outLength-1] = '=';
    outputBuffer[outLength-2] = '=';

    /* http://en.wikipedia.org/wiki/Base64
     Text content   M           a           n
     ASCII          77          97          110
     8 Bit pattern  01001101    01100001    01101110

     6 Bit pattern  010011  010110  000101  101110
     Index          19      22      5       46
     Base64-encoded T       W       F       u
     */


    while (inpos < inLength){
        switch (cycle) {
            case 0:
                outputBuffer[outpos++] = Encode[(inputBuffer[inpos]&0xFC)>>2];
                cycle = 1;
                break;
            case 1:
                temp = (inputBuffer[inpos++]&0x03)<<4;
                outputBuffer[outpos] = Encode[temp];
                cycle = 2;
                break;
            case 2:
                outputBuffer[outpos++] = Encode[temp|(inputBuffer[inpos]&0xF0)>> 4];
                temp = (inputBuffer[inpos++]&0x0F)<<2;
                outputBuffer[outpos] = Encode[temp];
                cycle = 3;                  
                break;
            case 3:
                outputBuffer[outpos++] = Encode[temp|(inputBuffer[inpos]&0xC0)>>6];
                cycle = 4;
                brea开发者_如何学Pythonk;
            case 4:
                outputBuffer[outpos++] = Encode[inputBuffer[inpos++]&0x3f];
                cycle = 0;
                break;                          
            default:
                cycle = 0;
                break;
        }
    }
    NSString *pictemp = [NSString stringWithUTF8String:outputBuffer];
    free(outputBuffer); 
    return pictemp;
}


Though I think you should encrypt your string instead of doing this I believe the method simply requires the data of your password string and returns a new encoded string.

//Make sure you import NSData+Base64Additions.h into your class

NSData* passwordData = [passwordString dataUsingEncoding:NSASCIIStringEncoding];
NSString *base64PasswordString = [passwordData encodeBase64ForData];

EDIT - added key file locations

You will need to download the following files and add the to your project: http://skpsmtpmessage.googlecode.com/svn-history/r24/trunk/SMTPSender/Classes/Base64Transcoder.h

http://skpsmtpmessage.googlecode.com/svn-history/r24/trunk/SMTPSender/Classes/Base64Transcoder.m

http://skpsmtpmessage.googlecode.com/svn-history/r2/trunk/SMTPSender/Classes/NSData+Base64Additions.h

http://skpsmtpmessage.googlecode.com/svn-history/r24/trunk/SMTPSender/Classes/NSData+Base64Additions.m

0

精彩评论

暂无评论...
验证码 换一张
取 消