1. 程式人生 > >IOS成長之路-DES+Base64 加密、解密

IOS成長之路-DES+Base64 加密、解密

DES是一種分組資料加密技術(先將資料分成固定長度的小資料塊,之後進行加密),速度較快,適用於大量資料加密
3DES是一種基於DES的加密演算法,使用3個不同密匙對同一個分組資料塊進行3次加密,如此以使得密文強度更高。
相較於DES3DES演算法而言,AES演算法有著更高的速度和資源使用效率,安全級別也較之更高了,被稱為下一代加密標準。

用DES實現加密和解密的過程:(註釋是我自己理解新增。不對的地方望指出)

.h檔案中:

  1. + (NSString *)encryptWithText:(NSString *)sText;//加密
  2. + (NSString *)decryptWithText:(NSString *)sText;//解密

.m檔案中  (導包:#import"GTMBase64.h"(下面說)  #import<CommonCrypto/CommonCryptor.h>
  1. + (NSString *)encryptWithText:(NSString *)sText  
  2. {  
  3.     //kCCEncrypt 加密
  4.     return [self encrypt:sText encryptOrDecrypt:kCCEncrypt key:@"des"];  
  5. }  
  6. + (NSString *)decryptWithText:(NSString *)sText  
  7. {  
  8.     //kCCDecrypt 解密
  9.     return [self encrypt:sText encryptOrDecrypt:kCCDecrypt key:@"des"];  
  10. }  
  11. + (NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation key:(NSString *)key  
  12. {  
  13.     constvoid *dataIn;  
  14.     size_t dataInLength;  
  15.     if (encryptOperation == kCCDecrypt)
    //傳遞過來的是decrypt 解碼
  16.     {  
  17.         //解碼 base64
  18.         NSData *decryptData = [GTMBase64 decodeData:[sText dataUsingEncoding:NSUTF8StringEncoding]];//轉成utf-8並decode
  19.         dataInLength = [decryptData length];  
  20.         dataIn = [decryptData bytes];  
  21.     }  
  22.     else//encrypt
  23.     {  
  24.         NSData* encryptData = [sText dataUsingEncoding:NSUTF8StringEncoding];  
  25.         dataInLength = [encryptData length];  
  26.         dataIn = (constvoid *)[encryptData bytes];  
  27.     }  
  28.     /* 
  29.      DES加密 :用CCCrypt函式加密一下,然後用base64編碼下,傳過去 
  30.      DES解密 :把收到的資料根據base64,decode一下,然後再用CCCrypt函式解密,得到原本的資料 
  31.      */
  32.     CCCryptorStatus ccStatus;  
  33.     uint8_t *dataOut = NULL; //可以理解位type/typedef 的縮寫(有效的維護了程式碼,比如:一個人用int,一個人用long。最好用typedef來定義)
  34.     size_t dataOutAvailable = 0; //size_t  是操作符sizeof返回的結果型別
  35.     size_t dataOutMoved = 0;  
  36.     dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);  
  37.     dataOut = malloc( dataOutAvailable * sizeof(uint8_t));  
  38.     memset((void *)dataOut, 0x0, dataOutAvailable);//將已開闢記憶體空間buffer的首 1 個位元組的值設為值 0
  39.     NSString *initIv = @"12345678";  
  40.     constvoid *vkey = (constvoid *) [key UTF8String];  
  41.     constvoid *iv = (constvoid *) [initIv UTF8String];  
  42.     //CCCrypt函式 加密/解密
  43.     ccStatus = CCCrypt(encryptOperation,//  加密/解密
  44.                        kCCAlgorithmDES,//  加密根據哪個標準(des,3des,aes。。。。)
  45.                        kCCOptionPKCS7Padding,//  選項分組密碼演算法(des:對每塊分組加一次密  3DES:對每塊分組加三個不同的密)
  46.                        vkey,  //金鑰    加密和解密的金鑰必須一致
  47.                        kCCKeySizeDES,//   DES 金鑰的大小(kCCKeySizeDES=8)
  48.                        iv, //  可選的初始向量
  49.                        dataIn, // 資料的儲存單元
  50.                        dataInLength,// 資料的大小
  51.                        (void *)dataOut,// 用於返回資料
  52.                        dataOutAvailable,  
  53.                        &dataOutMoved);  
  54.     NSString *result = nil;  
  55.     if (encryptOperation == kCCDecrypt)//encryptOperation==1  解碼
  56.     {  
  57.         //得到解密出來的data資料,改變為utf-8的字串
  58.         result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(constvoid *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding] autorelease];  
  59.     }  
  60.     else//encryptOperation==0  (加密過程中,把加好密的資料轉成base64的)
  61.     {  
  62.         //編碼 base64
  63.         NSData *data = [NSData dataWithBytes:(constvoid *)dataOut length:(NSUInteger)dataOutMoved];  
  64.         result = [GTMBase64 stringByEncodingData:data];  
  65.     }  
  66.     return result;  
  67. }  
這裡用到了Base64.。。從網上找到了一些好的類,直接貼到這裡用

Base64.h

  1. //
  2. //  GTMBase64.h
  3. //
  4. //  Copyright 2006-2008 Google Inc.
  5. //
  6. //  Licensed under the Apache License, Version 2.0 (the "License"); you may not
  7. //  use this file except in compliance with the License.  You may obtain a copy
  8. //  of the License at
  9. //
  10. //  http://www.apache.org/licenses/LICENSE-2.0
  11. //
  12. //  Unless required by applicable law or agreed to in writing, software
  13. //  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  14. //  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
  15. //  License for the specific language governing permissions and limitations under
  16. //  the License.
  17. //
  18. #import <Foundation/Foundation.h>
  19. #import "GTMDefines.h"
  20. // GTMBase64
  21. //
  22. /// Helper for handling Base64 and WebSafeBase64 encodings
  23. //
  24. /// The webSafe methods use different character set and also the results aren't
  25. /// always padded to a multiple of 4 characters.  This is done so the resulting
  26. /// data can be used in urls and url query arguments without needing any
  27. /// encoding.  You must use the webSafe* methods together, the data does not
  28. /// interop with the RFC methods.
  29. //
  30. @interface GTMBase64 : NSObject  
  31. //
  32. // Standard Base64 (RFC) handling
  33. //
  34. // encodeData:
  35. //
  36. /// Base64 encodes contents of the NSData object.
  37. //
  38. /// Returns:
  39. ///   A new autoreleased NSData with the encoded payload.  nil for any error.
  40. //
  41. +(NSData *)encodeData:(NSData *)data;  
  42. // decodeData:
  43. //
  44. /// Base64 decodes contents of the NSData object.
  45. //
  46. 相關推薦

    IOS成長-DES+Base64 加密解密

    DES是一種分組資料加密技術(先將資料分成固定長度的小資料塊,之後進行加密),速度較快,適用於大量資料加密 3DES是一種基於DES的加密演算法,使用3個不同密匙對同一個分組資料塊進行3次加密,如此以使得密文強度更高。 相較於DES和3DES演算法而言,AES演算

    IOS成長-MD5加密演算法

    -(NSString *)md5:(NSString *)str {       constchar *cStr = [str UTF8String];//轉換成utf-8     unsigned char result[16];//開闢一個16位元組(128位:m

    IOS成長-使用系統預設聲音震動

    匯入框架: 程式碼: #import <UIKit/UIKit.h> #import <AudioToolbox/AudioToolbox.h> @interface MsgPlaySound : NSObject { SystemS

    【請求加密】android ios java後臺通用DES base64加密

    1、OC方面 Base64編碼採取Google官方程式碼 GTMBase64 2、Android 方面採取  Android  android.util.Base64原始碼 3、後臺Java端解密採取android.util.Base64原始碼 4、客戶端進行DES加

    IOS成長-從網路讀取資料

    邏輯: 首先建立一個NSURL地址,傳送request請求,然後呼叫                                 - (void)connection:(NSURLConnec

    shell指令碼:base64加密解密字串並賦值給變數方法

    幾經波折才能夠實現使用 base64 加密、解密字串並賦值給變數。網上絕大多數是使用 echo 管道實現 加密和解密字串的輸出。 程式碼如下: pwd=$( base64 -d <<< MQo= ) # 解碼 in=$( base64 <&l

    java實現對稱加密AES和DES加密解密

            目前主流的加密方式有:1、對稱加密:AES、DES      2、非對稱加密:RSA、DSA。         本文主要講解java實現呼叫AES/DES加密演算法包,呼叫過程最精要的就是下面兩句話: Cipher cipher = Cipher.getIn

    打碎自己重建自己 | 阿里最年輕P9的成長

    長劍如歌,揮不盡的英雄義氣 白衣飄飄,斬不斷的情深意長 閱遍桑田,放馬東籬 少年情愫,人曰沈公子 他的花名源於蒼月的武俠小說《劍歌》中的主人公,他是阿里巴巴最年輕的P9之一,他的經歷正是阿里巴巴從商業公司向科技公司轉型的生動註腳。 沈詢其人 阿里巴巴中介軟體資深專家

    測試開發的成長 - 自動化一站式平臺(UI介面)

    1、相信大家在公司做自動化的時候隨著公司的專案用例增加、多人協作會碰到很多問題,程式碼、資料、版本、專案整合,後期整合等等的會浪費很多時間,而且對於後期維護感覺相當的不便利,為了能解決這些問題,開發一個自動化平臺來統一對這些程式碼、資料、版本、整合進行處理是一個公司自動化成本的一個不錯的方法(而且對

    我的Python成長--Day39非同步+回撥機制執行緒佇列執行緒Event協程Gevent等

    1、非同步、同步、阻塞、非阻塞 我們在之前已經簡單介紹過了同步非同步還有阻塞和非阻塞,和本小節我們要介紹的同步呼叫和非同步呼叫有很大關係,所以我們在這裡再囉嗦一下: 1、阻塞與非阻塞指的是程式的兩種執行狀態 阻塞:遇到IO就發生阻塞,程式一旦遇到阻塞操作就會停在原地,並且

    我的Python成長--Day46-單表查詢多表查詢子查詢

    目錄 聚合函式 內連線查詢 子查詢 1、資料的增刪改 對資料的增刪改我們之前已經詳細介紹過了,在這裡我們著重介紹資料的查詢操作,對資料的增刪改進行簡單的回顧 增加資料 insert [in

    Python成長(三)——詞典文字檔案的輸入輸出模組函式的引數傳遞

    詞典 可以儲存多個元素的物件成為容器,前面提到的list和tuple都屬於容器類,這裡介紹一個新的容器:詞典。 基本概念 常見的建立詞典的基本方法: dic={'鍵':值,'鍵':值,'鍵':值...} 詞典包含兩部分,鍵和值,其中鍵一般為字串,也

    OpenCV成長:直線輪廓的提取與描述

    本文是51CTO部落格作者Ronny的文章,原文地址:http://blog.51cto.com/ronny/1394139 轉載:http://mobile.51cto.com/aengine-435442.htm 基於內容的影象分析的重點是提取出影象中具有代表性的

    C語言已死(連載1)——趣味通俗實用的計算機達人成長C語言高階技巧篇

    第一章 學習C語言的起跑線1.1 C語言已死?本書描述的就是使用C語言的高階技巧,力求將你的C語言能力由“基礎”提升為“高階”。但是學習態度勝過學習方法,在正式學習之前,有一個問題不吐不快,那就是“C語言還值得學習嗎?”正方觀點——C語言已死正方論據:C語言的三宗罪:1、程式

    我的Python成長--Day48--mysql高階(檢視觸發器事物儲存過程函式流程控制資料備份與恢復)

    目錄 1、檢視 2、觸發器 3、事物 自定義函式 1、檢視 1.1、什麼是檢視 檢視是一張表或者多張表的查詢結果構成的一張虛擬表

    一只菜鳥的成長

    小強測試品牌 性能測試 軟件測試瘋狂講義 轉型測試 引子以下內容選自《小強軟件測試瘋狂講義》一書正文 簡單地自我介紹,就是一只數學專業,腦洞極大,深度強迫癥,編程菜鳥,顏控,但人醜的少女。 我的願望很簡單,一輩子隨遇而安家庭幸福,但希望能一直堅持努力成為有技術含量的妹紙。什麽叫做“

    php程序員的成長

    超時 php內核 獨立 r+ 鏈接 沖突 提升 代理服務 osql 第一階段:基礎階段(基礎PHP程序員) 重點:把LNMP搞熟練(核心是安裝配置基本操作) 目標:能夠完成基本的LNMP系統安裝,簡單配置維護;能夠做基本的簡單系統的php開發;能夠在PHP中型系統中支持某個

    web前端研發工程師編程能力成長

    特征 prot 響應 else 自然 編程思想 完成 尋找 文件 【背景】 如果你是剛進入WEB前端研發領域,想試試這潭水有多深,看這篇文章吧;如果你是做了兩三年WEB產品前端研發,迷茫找不著提高之路,看這篇文章吧;如果你是四五年的前端開發高手,沒有難題能難得住你的寂寞

    成長(一) GridLayout 布局

    bsp ren 1.0 androi enc 代碼區 andro XML orien 效果圖 代碼區 <?xml version="1.0" encoding="utf-8"?><GridLayout xmlns:android="htt

    二次元碼農的成長(二)json到底有什麽用途

    頁面 asc 語法 處理 交互 分隔 規則 stl 成長之路 寫的有問題請指出 一、什麽是json 1json指的是javaScript的表示方法 2JSON是輕量級的文本數據交換格式 3 Json是獨立語言 4 json具有自我描述性 更易理解 二、語法規則 1對