您的位置:首页 > 编程语言 > Java开发

和java的DES/ECB/PKCS5Padding相同的objc实现方式

2016-06-30 12:19 621 查看
java是:DES/ECB/PKCS5Padding

1、是DES,不是3DES。

2、分组方式是ECB,所以不需要初始化向量。
3、填充模式是PKCS5Padding。

在stackoverflow上查,说iOS是不支持PKCS5Padding的,但是继续查找后实际是支持的,只是方式很怪异。

-(NSString*) decryptUseDES:(NSString*)plainText  {

    NSString * key = @"akey";

    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,

                                          //这个地方很奇怪,这种组合方式实现的结果就是java的PKCS5Padding模式了。
                                          //不知道为什么参数中指明的是kCCOptionPKCS7Padding,而实际的填充就是PKCS5Padding了。

                                          kCCOptionECBMode | kCCOptionPKCS7Padding,

                                          [key UTF8String], kCCKeySizeDES,

                                          NULL,
 //ECB模式,不需要初始化向量。

                                          [textData bytes], dataLength,

                                          buffer, 1024,

                                          &numBytesEncrypted);

    if (cryptStatus == kCCSuccess) {

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

        

        NSUInteger capacity = data.length * 2;

        NSMutableString *sbuf = [NSMutableString stringWithCapacity:capacity];

        const unsigned char *buf = data.bytes;

        NSInteger i;

        for (i=0; i<data.length; ++i) {

            [sbuf appendFormat:@"%02X", (NSUInteger)buf[i]];

        }

        

        ciphertext = [sbuf copy];

    }

    return ciphertext;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DES ECB PKCS5Padding java iOS