2

Objective-CAESでエンコードされた暗号化された文字列を復号化したい:Base64

これは私のコードです:

NSString *base64String = @"RwH0KBSRjFKJQYGsCze0";
NSData *base64Data = [[NSData alloc] initWithBase64EncodedString:
     base64String options:0];

char * key = "shouldbe16chars.";
NSUInteger dataLength = [base64Data length];
uint8_t unencryptedData[dataLength + kCCKeySizeAES128];
size_t unencryptedLength;

CCCryptorStatus status = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
    0 , key,kCCKeySizeAES128, NULL, [base64Data bytes], 
    [base64Data length], unencryptedData, dataLength, 
    &unencryptedLength);

NSString *output = [[NSString alloc] initWithBytes:
     unencryptedData length:unencryptedLength 
     encoding:NSUTF8StringEncoding];

NSLog(@"status: %d output: %@",status, output);

コードを実行すると、結果は次のようになります。Status = -4301, output = null

ドキュメントによると、ステータス 4301 = 「バッファが小さすぎます」

コードをデバッグするとき、変数は次のように設定されます。

base64Data = 4701f428 14918c52 894181ac 0b37b4
dataLength = 15 bytes
unencryptedLength = 0
unencryptedData = {}

エラーは、オプションkCCOptionPKCS7Paddingが設定されている場合にのみ発生します0。ステータス = 0、出力 = {} に設定されている場合。

SO で多くのコード サンプルを確認しましたが、コードに問題はありません。

私のコードの何が問題なのか、何か考えはありますか?

ところで:base64stringこのサンプル コードで使用しているコードは、オープン ソース フレームワークhttp://www.movable-type.co.uk/scripts/aes.htmlを使用して JavaScript で作成されています。この情報が役立つかどうかはわかりません。

4

1 に答える 1

1

CCCrypt の最後から 2 番目の引数は、dataOutAvailable にする必要があります。inData の長さのように見える dataLength を渡します (すでに正しく、引数として渡されています)。

于 2014-04-10T06:25:53.410 に答える