Использование входного значения Textfield для расчета MD5 - PullRequest
0 голосов
/ 21 мая 2011

Я столкнулся с проблемой при попытке передать введенные строки Textfield для вычисления MD5.

Когда я просто передаю указанную строку, например, abc, в моем коде и выполняю вычисление MD5, он вернетправильный результат.

Когда я пытаюсь использовать текстовое поле, чтобы пользователь ввел ту же строку, abc, все пошло не так, а затем я передаю textfield.text в функцию md5 для выполнения хэша md5.На этот раз результат был другим.

Я полностью запутался в этой проблеме и застрял там почти неделю, но просто не мог понять, почему и как ее решить.

Не могли бы вы помочь мне с этим?

вот мой код:

Hello_MD5ViewController.h

//
//  Hello_MD5ViewController.h
//  Hello-MD5
//
//

#import <UIKit/UIKit.h>

@interface Hello_MD5ViewController : UIViewController {
    UILabel *md5Text;
    UITextField *plainText;

}
@property (nonatomic, retain) IBOutlet UILabel *md5Text;
- (IBAction)buttonPressed: (id)sender;
@end

Hello_MD5ViewController.m

//
//  Hello_MD5ViewController.m
//  Hello-MD5
//

#import "Hello_MD5ViewController.h"
#import <CommonCrypto/CommonDigest.h> //Import for CC_MD5 access

NSString* md5(NSString *str)
{
    const char *cStr = [str UTF8String];
    unsigned char result[16];
    CC_MD5(cStr, strlen(cStr), result); //This is the MD5 call
    return [NSString stringWithFormat:
            @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", 
            result[0], result[1], result[2], result[3], 
            result[4], result[5], result[6], result[7], 
            result[8], result[9], result[10], result[11], 
            result[12], result[13], result[14], result[15]
            ];
}


@implementation Hello_MD5ViewController
@synthesize md5Text;

- (IBAction)buttonPressed:(id)sender {
    NSString *input = [[NSString alloc] initWithString: plainText.text];
    NSString *digest = md5(input); //if I use textfield.text to passing the string, the result will be wrong
    //NSString *digest = md5(@"123"); //if I give a string within code like this, it'll return correct result
    NSString *md5Result = [[NSString alloc] initWithFormat:
                           @"MD5 RESULT \n%@", digest];
    md5Text.text = md5Result;
    //Calculate MD5 value
}

- (void)dealloc
{
    [plainText release];
    [md5Text release];
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];
}
*/

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    self.md5Text = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

Спасибо за вашу помощь!

===== ОБНОВЛЕННАЯ ВЕРСИЯ @ GMT + 1 0251 час. 21.05.2011 ====== *

Hello_MD5ViewController.h

//  Hello-MD5
//
//

#import <UIKit/UIKit.h>

/*@interface NSString (md5Extension)
- (NSString *) md5;
@end

@interface NSData (md5Extension)
- (NSString *) md5;
@end
*/
@interface Hello_MD5ViewController : UIViewController {
    UILabel *md5Text;
    UITextField *plainText;

}
//@property (nonatomic, retain) NSString *input;
@property (nonatomic, retain) IBOutlet UILabel *md5Text;
- (IBAction)buttonPressed: (id)sender;
@property (nonatomic, retain) IBOutlet UITextField *plaintext;
@end

Hello_MD5ViewController.m

//  Hello-MD5


#import "Hello_MD5ViewController.h"
#import <CommonCrypto/CommonDigest.h> //Import for CC_MD5 access

NSString* md5(NSString *str)
{
    const char *cStr = [str UTF8String];
    unsigned char result[16];
    CC_MD5(cStr, strlen(cStr), result); //This is the MD5 call
    return [NSString stringWithFormat:
            @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", 
            result[0], result[1], result[2], result[3], 
            result[4], result[5], result[6], result[7], 
            result[8], result[9], result[10], result[11], 
            result[12], result[13], result[14], result[15]
            ];
}

@implementation Hello_MD5ViewController
@synthesize md5Text;
@synthesize plaintext;

- (IBAction)buttonPressed:(id)sender {
    //NSString *input = [[NSString alloc] initWithString: plainText.text];
    if(plainText.text == nil)
    {
        NSLog(@"Disconnected.");
    }
    //NSLog(@"Output %@",plainText.text);
    //NSString *digest = md5(input);
    //NSString *digest = md5(@"123");
    //NSString *md5Result = [[NSString alloc] initWithFormat:
                          // @"MD5 RESULT \n%@", digest];
    //md5Text.text = md5Result;
    //Calculate MD5 value
}

- (void)dealloc
{
    [plainText release];
    [md5Text release];
    //[input release];
    [super dealloc];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

/*
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];
}
*/

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    self.md5Text = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

1 Ответ

1 голос
/ 21 мая 2011

Вы не определили IBOutlet для plainText.Похоже, связи здесь нет.Вы запрашиваете text объекта nil и, следовательно, неверный вывод.

...