iphone开发des加密解密

本文详细介绍了在iOS端使用DES进行数据加密与解密时遇到的问题,即解密后的数据在末尾出现不正常字符的情况。通过分析原因,我们了解到这是由于DES的ECB模式在处理非8字节块数据时存在不足。为了解决这个问题,文章建议将解密模式从ECB模式更改为PKCS7Padding|ECB模式,从而有效解决了尾部出现奇怪字符的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发过程中,使用DES来进行加密和解密,服务器端使用java的javax.crypto.Cipher包来进行加密解密,客户端使用mac自带的<CommonCrypto/CommomCryptor.h>中的ccrypt()函数。


ios端解密代码如下:

 +(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key {
    NSData* cipherData = [cipherText hexToBytes];
    size_t bufferPtrSize = 0;
    bufferPtrSize=([cipherText length]+kCCBlockSize3DES)& ~(kCCBlockSize3DES-1);
    uint8_t *buffer=NULL;
    buffer=malloc(bufferPtrSize*sizeof(uint8_t));
    memset((void*)buffer, 0, bufferPtrSize);
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmDES,
                                          kCCOptionECBMode,
                                          [key UTF8String],
                                          kCCKeySizeDES,
                                          nil,
                                          [cipherData bytes],
                                          [cipherData length],
                                          (void*)buffer,
                                          bufferPtrSize,
                                          &numBytesDecrypted);
    NSString* plainText = nil;
    if (cryptStatus == kCCSuccess) {
        NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
        plainText = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
    }
    return plainText;
} 



在ios端的解密结果,总是会在后面多几个奇怪的字符,查找了半天,最后发现是由于DES的ECB模式是通过8字节的块来进行解密的,当输入的字符串被分割的最后一个块不是8字节时,cryptor不知道如何处理这个非8字节的块。

kCCOptionECBMode改为kCCOptionPKCS7Padding | kCCOptionECBMode,问题得到解决~~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值