iOS -- DES演算法

來源:互聯網
上載者:User

標籤:

演算法步驟:DES演算法把64位的明文輸入塊變為64位的密文輸出塊,它所使用的密鑰也是64位(實際用到了56位,第8、16、24、32、40、48、56、64位是校正位, 使得每個密鑰都有奇數個1),其演算法主要分為兩步:1)初始置換其功能是把輸入的64位元據塊按位重新組合,並把輸出分為L0、R0兩部分,每部分各長32位,其置換規則為將輸入的第58位換到第一位,第50位換到第2位……依此類推,最後一位是原來的第7位。L0、R0則是換位輸出後的兩部分,L0是輸出的左32位,R0是右32位,例:設定換前的輸入值為D1D2D3……D64,則經過初始置換後的結果為:L0=D58D50……D8;R0=D57D49……D7。其置換規則見下表:58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,2)逆置換經過16次迭代運算後,得到L16、R16,將此作為輸入,進行逆置換,逆置換正好是初始置換的逆運算,由此即得到密文輸出。此演算法是對稱式加密演算法體系中的代表,在電腦網路系統中廣泛使用. OC 代碼:
#import "NSString+MFDES.h"#import <CommonCrypto/CommonCrypto.h>// key 必須8位#define key @"01234567"// 向量static Byte iv[] = {1, 2, 3, 4, 5, 6, 7, 8};@implementation NSString (MFDES)// 1. 字串對稱式加密(DES)- (NSString *)stringWithDES{    // 1. 將字串本身轉化為C字串    const char *string = [self UTF8String];    // 2. 接收容器    unsigned char byte[1024];    // 3. 容器大小    size_t dataOutMoved = 0;    // 4. DES加密過程    // 1. 參數1. 加密 或者 解密    // 2. 參數2: 加密 / 解密 方式    // 3. 參數3: 分組密碼的選項    // 4. 參數4: 秘鑰    // 5. 參數5: 秘鑰的大小    // 6. 參數6: 向量    // 7. 參數7: c的字串    // 8. 參數8: 字串的長度    // 9. 參數9: 接收容器    // 10. 參數10: 容器的大小    // 11. 參數11: 容器最終的個數    CCCryptorStatus cryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, string, strlen(string), byte, 1024, &dataOutMoved);        if (cryptorStatus == kCCSuccess) {        // 轉成字串 ==== base64返回        NSLog(@"加密成功");        NSData *desData = [NSData dataWithBytes:byte length:dataOutMoved];        NSString *desBaseString = [desData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];        return desBaseString;            } else {                NSLog(@"加密失敗");            }        return @"";    }// 2. 字串對稱解密(DES)- (NSString *)desWithString{        NSData *base64Data = [[NSData alloc] initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters];        const void *byte = base64Data.bytes;    unsigned char buffer[1024];    size_t dataOutMoved = 0;        // C 語言方法    CCCryptorStatus cryptorStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, byte, base64Data.length, buffer, 1024, &dataOutMoved);        if (cryptorStatus == kCCSuccess) {                NSLog(@"解密成功");        NSData *desData = [NSData dataWithBytes:buffer length:dataOutMoved];        NSString *desBaseString = [[NSString alloc] initWithData:desData encoding:NSUTF8StringEncoding];        return desBaseString;            } else {                NSLog(@"解密失敗");            }        return @"";    }

 

iOS -- DES演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.