2011-11-30 16 views
0

この例をObjective-Cプログラムに適用するとOPENSSL DESの例が見つかりましたが、復号化されたテキストは入力と同じではありません。IPHONE OPENSSLを使用したObjective-CプログラムはDES暗号化を実行します

textField.textは誰も私を助けることができる入力テキストボックス

のですか?どうもありがとう!!!例えば、

 when I input "test", the decrypted text ="test&\264"  
    when I input "Enter an Text here", the decrypted text ="Ente"  
    when I input "1234567890", the decrypted text ="1234h&\311"   
//ENCRYPTION 
char* desen(char *clear, int size)  
{ 
    printf("Encrypted text\t %s \n",clear);  
    char *encrypted;  
    char key[]="password";  
    encrypted=(char*)malloc(sizeof(clear));  
    static char* Res;  
    int    n=0;  
    DES_cblock  Key2;  
    DES_key_schedule schedule;  

    Res = (char *) malloc(sizeof(clear));  
    // Prepare the key for use with DES_cfb64_encrypt/ 

    memcpy(Key2, key,8);  
    DES_set_odd_parity(&Key2);  
    DES_set_key_checked(&Key2, &schedule);  


    // Encryption occurs here/ 
    DES_cfb64_encrypt((unsigned char *) clear, (unsigned char *) Res,  
     sizeof(clear), &schedule, &Key2, &n, DES_ENCRYPT);  

    memcpy(encrypted,Res, sizeof(clear));  
    printf("Key:%s\n",encrypted);  
    return encrypted;  
}  
//------------------------------------------------  
//DECRYPTION-------------------------------  
char* desde(char *clear, int size)  
{  
    char *decrypted;  
    char key[]="password";  
    decrypted=(char*)malloc(sizeof(clear));  

    static char* Res;  
    int n=0;  
    DES_cblock Key2;  
    DES_key_schedule schedule;  
    Res = (char *) malloc(sizeof(clear));  
    // Prepare the key for use with DES_cfb64_encrypt/ 
    memcpy(Key2, key,8);  
    DES_set_odd_parity(&Key2);  
    DES_set_key_checked(&Key2, &schedule);  

    // Encryption occurs here/ 
    DES_cfb64_encrypt((unsigned char *) clear, (unsigned char *) Res,  
     sizeof(clear), &schedule, &Key2, &n, DES_DECRYPT);  

    memcpy(decrypted,Res, sizeof(clear));  

    printf("Key:%s\n",decrypted);  
    return decrypted;  
}  
    //------------------------------------------------  
    //----------Button------------------------------  
- (IBAction)calculateDES_ENCRYPT:(id)sender  
{  

    char key[]="password";  
    char *en;  
    char *de;  
    NSString *string = textField.text;  
    const char *temp=[string fileSystemRepresentation];  
    int len=strlen(temp);  
    char clear[len+1];  
    //char clear[50];  
    strcpy(clear,temp);  

    en=desen(clear,len+1);  
    de= desde(en, len+1);  
}  
------------------------------------------------  
+0

DESは決して21世紀に使用されるべきではありません。 –

答えて

0

このライン

encrypted=(char*)malloc(sizeof(clear)); 

は、あなたが何を考えて行っていないため

。 32ビットシステムでは、指し示されたデータの長さではなく、ポインタのサイズであるため、sizeof(clear)は4になります。したがって、おそらく4バイトのみを暗号化/復号化しているので、その4バイトにいくつかのゴミを加えたものを印刷しています。

+0

ありがとうJeremyP、私はC言語の初心者ですので、この関数は "sizeof"を置き換えることができます。 – keithlsp

+0

終端のヌル文字を含む文字列全体を暗号化したい場合は、 'strlen(clear)+ 1'が必要です。結果はバイトの配列であることに注意してください。 – JeremyP

+0

ありがとうJermyP、私の問題は解決されている!!!!どうもありがとう!!!! – keithlsp

関連する問題