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的加密方式解釋,這是第一次寫關於加密方式的博客,有什麼不足的地方也希望大家能指針,最後如果你覺得這個博客能幫助到你的話,請點一個小❤️❤️唄。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章