美文网首页
iOS AES/Des解密 偏移量取加密数据的前16位(Byte

iOS AES/Des解密 偏移量取加密数据的前16位(Byte

作者: Jody526 | 来源:发表于2020-05-15 11:03 被阅读0次

最近在弄AES解密,解密方法是 iv取加密文件内容的前16位,然后解密之后把内容里面的填充字符b"\0"去掉

1.首先是把data转成Byte数组 然后取前16位
Byte *testByte = (Byte *)[data bytes];
Byte *bytes =malloc(sizeof(*bytes)*data.length);
for(int i=0;i<16;i++){
    bytes[i] = testByte[i];
}
2.跟后端同步好补位方法 我这里是不补位填0 其他补位方法自行查找
3.去掉数据里面补位的0,我这里是把data转换成字符串 ,我这边是不足16位,会补够0到16位
final

+(NSString *)AES128Decrypt:(NSData *)data key:(NSString *)key{
    char keyPtr[kCCKeySizeAES128 + 1];
    memset(keyPtr, 0, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [data length];
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    
    //16字节的偏移量
    Byte *testByte = (Byte *)[data bytes];
    Byte *bytes =malloc(sizeof(*bytes)*data.length);
    for(int i=0;i<16;i++){
        bytes[i] = testByte[i];
    }
    size_t numBytesCrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmAES128,
                                          0,//不补位
                                          keyPtr,
                                          kCCBlockSizeAES128,
                                          bytes,
                                          [data bytes],
                                          dataLength,
                                          buffer,
                                          bufferSize, &numBytesCrypted);
    if (cryptStatus == kCCSuccess) {
        //原始数据
        NSData *resultData = [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
        //原始数据去掉前面16位的偏移量
        NSData *subData = [resultData subdataWithRange:NSMakeRange(16, resultData.length-16)];
        //方法:https://www.jianshu.com/p/fb9d3a69d3d3
        NSString *plaintext = @"";
        char termChar[1] = {'\0'};
        NSMutableData *data = [NSMutableData dataWithBytes:subData.bytes length:subData.length];
        [data appendBytes:termChar length:1];
        plaintext = [[NSString alloc] initWithCString:data.bytes encoding:NSUTF8StringEncoding];
        return plaintext;
    }
    free(buffer);
    return nil;
}

AES解密使用方法
    NSData *testData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"1.txt" ofType:@""]];
    NSString *laststr = [QLAESDecrypt AES128Decrypt:testData key:@"keykeykey"];
    NSLog(@"laststr::%@",laststr);
下面是Des解密 单纯MARK下
//Des解密
+(NSData *)decryptUseDES:(NSString *)plainText key:(NSString *)key{

    NSData *plaindata = nil;
    NSData *cipherdata = [[NSData alloc] initWithBase64EncodedString:plainText options:NSDataBase64DecodingIgnoreUnknownCharacters];
    
    size_t bufferSize = cipherdata.length;
    void * buffer = malloc(bufferSize);

    NSData * date = [key dataUsingEncoding:NSUTF8StringEncoding];
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmDES,/* 算法 */
                                          kCCOptionPKCS7Padding,
                                          [key UTF8String],
                                          kCCKeySizeDES,
                                          [date bytes],
                                          [cipherdata bytes],
                                          [cipherdata length],
                                          buffer,
                                          bufferSize,
                                          &numBytesDecrypted);
    if(cryptStatus == kCCSuccess)
    {
        plaindata = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
        return plaindata;
        
    }
    
     return plaindata;
}

相关文章

  • iOS常用加解密方式

    AES128 AES128加密 AES128解密 3DES 3DES加密 3DES解密 DES DES加密 DES解密

  • Java AES/DES加密&解密

    DES DES加密&解密代码如下: AES AES加密&解密代码如下:

  • iOS AES/Des解密 偏移量取加密数据的前16位(Byte

    最近在弄AES解密,解密方法是 iv取加密文件内容的前16位,然后解密之后把内容里面的填充字符b"\0"去掉 1....

  • crypto-js实现加密解密

    1、DES加密 2、DES解密 3、AES加密 4、AES解密 5、注意:js的前端加密不能与java加密代码写的...

  • IOS的签名机制

    前言 了解IOS的数字签名机制之前我们需要掌握以下几个知识:加密解密(对称加密(DES 3DES AES),非对称...

  • iOS加密小记

    1 对称加密加密解密是同一个密钥,加解密速度快,常见的有DES,3DES,AES128,AES256等。DES已经...

  • iOS 签名机制

    前言 学习iOS签名机制,可参考如下学习路线: 加密解密(对称DES 3DES AES、非对称RSA)--->单向...

  • iOS开发证书相关总结

    加密、解密 对称加密、非对称加密 对称加密:加密、解密使用相同的密钥;DES、AES(Mac、Windows的磁盘...

  • 密码学及iOS签名(一) —— 加密解密

    加密解密类型 对称加密 公钥密码(非对称加密) 对称加密(常见的DES、 3DES、AES) 在对称密码中,加密、...

  • 加密

    AES 加密 密钥生成 数据填充至16的倍数 AES 加密 BASE64 加密 解密 BASE64 解密 AES ...

网友评论

      本文标题:iOS AES/Des解密 偏移量取加密数据的前16位(Byte

      本文链接:https://www.haomeiwen.com/subject/vooqohtx.html