iOS DES加解密实现

2026-01-16 15:17:13

1、DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。

iOS DES加解密实现

2、新建Xcode工程,然后选择新建文件,命名为DES继承与NSObject,如下:

iOS DES加解密实现

iOS DES加解密实现

iOS DES加解密实现

iOS DES加解密实现

iOS DES加解密实现

3、DES的.h文件里面的实现,声明两个外部调用方法,分别为DES加密方法和DES解密方法,参数为需要的加解密文本和加解密的key,如下:

iOS DES加解密实现

4、引入头文件,<CommonCrypto/CommonDigest.h>,<CommonCrypto/CommonCryptor.h>和"GTMBase64.h",GTMBase64为Base64的加解密库,使用系统的自带方法也可以,如下:

iOS DES加解密实现

5、加密算法实现如下:

 NSString *ciphertext = nil;

    NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [textData length];

    unsigned char buffer[1024];

    memset(buffer, 0, sizeof(char));

    size_t numBytesEncrypted = 0;

    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,

                                          kCCAlgorithmDES,

                                          kCCOptionPKCS7Padding | kCCOptionECBMode,

                                          [key UTF8String],

                                          kCCKeySizeDES,

                                          nil,

                                          [textData bytes],

                                          dataLength,

                                          buffer,

                                          1024,

                                          &numBytesEncrypted);

    if (cryptStatus == kCCSuccess) {

        NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];

        ciphertext = [GTMBase64 stringByEncodingData:data];

    }

iOS DES加解密实现

6、解密方法如下:

 NSString *plaintext = nil;

    NSData *cipherdata = [GTMBase64 decodeString:cipherText];

    unsigned char buffer[1024];

    memset(buffer, 0, sizeof(char));

    size_t numBytesDecrypted = 0;

    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,

                                          kCCOptionPKCS7Padding | kCCOptionECBMode,

                                          [key UTF8String],

                                          kCCKeySizeDES,

                                          nil,

                                          [cipherdata bytes],

                                          [cipherdata length],

                                          buffer,

                                          1024,

                                          &numBytesDecrypted);

    if(cryptStatus == kCCSuccess) {

        NSData *plaindata = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];

        plaintext = [[NSString alloc]initWithData:plaindata encoding:NSUTF8StringEncoding];

    }

iOS DES加解密实现

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢