0

OPENSSL DES に関する例を見つけました。この例を Objective-C プログラムに適用すると、復号化されたテキストは入力したものと等しくありませんでした。

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

1 に答える 1

0

この行

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

あなたが思うようにはしません。32 ビット システムでは、 sizeof(clear) は 4 になります。これは、指しているデータの長さではなく、ポインターのサイズだからです。したがって、おそらく 4 バイトのみを暗号化/復号化し、それらの 4 バイトとゴミを出力しています。

于 2011-11-30T16:23:27.347 に答える