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的加密方式解释,这是第一次写关于加密方式的博客,有什么不足的地方也希望大家能指针,最后如果你觉得这个博客能帮助到你的话,请点一个小❤️❤️呗。