iOS 加密之Base64+des

iOS 加密之Base64+des

前言

闲话少说,项目此前的加密方式为:
1、随机生成字符串key
2、对key进行base64加密得到keys
3、以key为秘钥对明文密码pwd进行des加密得到desPwd
4、将desPwd+@+keys进行base64加密得到最终的加密密码
由于之前des接触的比较少,各种博客也查了一遍,最后才知晓了这种加密其实就是Java中的des加密方式。

咱们先看下Java端进行加密的代码
在这里插入图片描述
在这里插入图片描述
从上面的代码中我们可以看到Java端的加密方式为des,这样我们并不能清楚的知道这中加密方式的对齐方式是什么,这样我又查看可以下Java文档中对应的解释

If no mode or padding is specified, provider-specific default values for the mode and padding scheme are used. For example, the SunJCE provider uses ECB as the default mode, and PKCS5Padding as the default padding scheme for DES, DES-EDE and Blowfish ciphers. This means that in the case of the SunJCE provider:


    Cipher c1 = Cipher.getInstance("DES/ECB/PKCS5Padding");
and
    Cipher c1 = Cipher.getInstance("DES");
are equivalent statements.

在这个文档中我们可以看出Java针对des加密算法的默认使用的是ECB模式,它对应的对齐方式是PKCS5Padding。
接下来我们可以看下iOS中怎么运用des进行加密的,好了直接上代码:

/** des 加密 */
+ (NSString *)desData:(NSString *)plainText key:(NSString *)key{
    char buffer [1024];
    memset(buffer, 0, sizeof(buffer));
    size_t bufferNumBytes;
    NSData *data = [plainText dataUsingEncoding:NSUTF8StringEncoding];
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding | kCCOptionECBMode,
                                          [key UTF8String],
                                          kCCKeySizeDES,
                                          NULL,
                                          [data bytes],
                                          [data length],
                                          buffer, 1024, &bufferNumBytes);
    if (cryptStatus == kCCSuccess) {
        NSData *returnData = [NSData dataWithBytes:buffer length:bufferNumBytes];
        NSString *base64Str = [returnData base64EncodedStringWithOptions:0];
        return base64Str;
    }
    
    NSLog(@"des failed!");
    
    return nil;
}
  • 这里解释下上面的key,这个是要跟服务端统一确定的一个参数
  • 第二点注意的是CCCrypt方法中我们指定的kCCOptionPKCS7Padding对齐方式,之所以用kCCOptionPKCS7Padding这种对齐方式,是因为CommonCryptor.h这个类中有定义的:
enum {
    /* options for block ciphers */
    kCCOptionPKCS7Padding   = 0x0001,
    kCCOptionECBMode        = 0x0002
    /* stream ciphers currently have no options */
};
typedef uint32_t CCOptions;

好了,到这里基本上已经完成了des的加密方式解释,这是第一次写关于加密方式的博客,有什么不足的地方也希望大家能指针,最后如果你觉得这个博客能帮助到你的话,请点一个小❤️❤️呗。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值