IOS和Java进行AES密文传输(ECB&nb…

      可以参考之前写的: Java和C/C++进行DES/AES密文传输。现在老革命遇到新问题,需要开发IOS应用。之前了解了一定的加密知识,整个过程还是比较顺利的。
      使用CommonCryptor.h的方法进行加解密。几个关键参数设置如下:
      加密算法:kCCAlgorithmAES128 ( kCCAlgorithmAES也一样);
      iv: 设置为nil就可以了。因为ECB方式不需要初始化向量。如果不是采用ECB,那么除了密钥之外,加解密放的初始化向量也必须一致。
      options: (kCCOptionPKCS7Padding | kCCOptionECBMode)。 后一个option比较明显,因为其他端也是采用ECB。第一个option就比较曲折。一开头到处找PKCS5Padding,发现体位都很复杂,差点想引入openssl。不过后面搜索到PKCS7Padding和PKCS5Padding是兼容的(黑线 IOS和Java进行AES密文传输(ECB <wbr>+ <wbr>PKCS5Padding)),经测试还真的是兼容的。于是blabla搞定。
    网上找到一个开源的(NSData+CommonCrypto),撸来用了,写起来比较方便,加密代码:
-(NSData*) encryptText:(NSString*)text {
    CCCryptorStatus status = kCCSuccess;
    NSData* result = [[text dataUsingEncoding:NSUTF8StringEncoding]
                          dataEncryptedUsingAlgori thm:kCCAlgorithmAES128
                          key:[self getAesKey]
                          initializationVector:nil   // ECB加密不会用到iv
                          options:(kCCOptionPKCS7Padding|kCCOptionECBMode)
                          error:&status];
    if (status != kCCSuccess) {
        DLog(@"加密失败:%d", status);
        return nil;
    }
    return result;
}  
      解密代码如下:
-(NSString*) decryptText:(NSData*)data {
    CCCryptorStatus status = kCCSuccess;
    NSData* result = [data
                      decryptedDataUsingAlgori thm:kCCAlgorithmAES128
                      key:[[self getAesKey]
                      initializationVector:nil   // ECB解密不会用到iv
                      options:(kCCOptionPKCS7Padding|kCCOptionECBMode)
                      error:&status];
    if (status != kCCSuccess) {
        DLog(@"加密失败:%d", status);
        return nil;
    }
    return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
}
      经测试,可以与Java服务端(ECB + PKCS5Padding)进行文本的加解密操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值