在iOS中使用ECB进行3DES加密/解密

时间:2014-01-29 09:24:27

标签: ios encryption 3des

我正在制作一个应用程序,我必须在ECB模式下使用3DES加密来加密字符串。我使用“mykey”作为密钥。

+ (NSData *)tripleDesEncryptData:(NSData *)inputData
                             key:(NSData *)keyData
                           error:(NSError **)error
{
NSParameterAssert(inputData);
NSParameterAssert(keyData);

size_t outLength;

NSAssert(keyData.length == kCCKeySize3DES, @"the keyData is an invalid size");

NSMutableData *outputData = [NSMutableData dataWithLength:(inputData.length  +  kCCBlockSize3DES)];

CCCryptorStatus
    result = CCCrypt(kCCEncrypt, // operation
                     kCCAlgorithm3DES, // Algorithm
                     0, // options
                     keyData.bytes, // key
                     keyData.length, // keylength
                     nil,// iv
                     inputData.bytes, // dataIn
                     inputData.length, // dataInLength,
                     outputData.mutableBytes, // dataOut
                     outputData.length, // dataOutAvailable
                     &outLength); // dataOutMoved

    if (result != kCCSuccess) {
        if (error != NULL) {
            *error = [NSError errorWithDomain:@"com.your_domain.your_project_name.your_class_name."
                                         code:result
                                     userInfo:nil];
        }
        return nil;
    }
    [outputData setLength:outLength];
    NSLog(@"here is my output %@",outputData);
    return outputData;
}

由于密钥大小无效,我收到异常。 (我用这个'mykey'作为我的钥匙)。我不是加密专家。任何形式的帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

您的密钥大小无效,因为您的密钥大小无效。我不确定你还期待系统告诉你什么。 3DES算法要求密钥大小为24字节,“mykey”太短。

即使除了长度问题之外,通常直接使用字符串作为加密密钥也是一个坏主意。相反,您应该使用可接受的密钥到密钥算法,例如PBKDF2。