IOS成長之路-DES+Base64 加密、解密
DES是一種分組資料加密技術(先將資料分成固定長度的小資料塊,之後進行加密),速度較快,適用於大量資料加密
3DES是一種基於DES的加密演算法,使用3個不同密匙對同一個分組資料塊進行3次加密,如此以使得密文強度更高。
相較於DES和3DES演算法而言,AES演算法有著更高的速度和資源使用效率,安全級別也較之更高了,被稱為下一代加密標準。
用DES實現加密和解密的過程:(註釋是我自己理解新增。不對的地方望指出)
.h檔案中:
- + (NSString *)encryptWithText:(NSString *)sText;//加密
-
+ (NSString *)decryptWithText:(NSString *)sText;//解密
.m檔案中 (導包:#import"GTMBase64.h"(下面說) #import<CommonCrypto/CommonCryptor.h>)
- + (NSString *)encryptWithText:(NSString *)sText
- {
- //kCCEncrypt 加密
- return [self encrypt:sText encryptOrDecrypt:kCCEncrypt key:@"des"];
- }
-
+ (NSString *)decryptWithText:(NSString *)sText
- {
- //kCCDecrypt 解密
- return [self encrypt:sText encryptOrDecrypt:kCCDecrypt key:@"des"];
- }
- + (NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation key:(NSString *)key
- {
- constvoid *dataIn;
- size_t dataInLength;
-
if (encryptOperation == kCCDecrypt)
- {
- //解碼 base64
- NSData *decryptData = [GTMBase64 decodeData:[sText dataUsingEncoding:NSUTF8StringEncoding]];//轉成utf-8並decode
- dataInLength = [decryptData length];
- dataIn = [decryptData bytes];
- }
- else//encrypt
- {
- NSData* encryptData = [sText dataUsingEncoding:NSUTF8StringEncoding];
- dataInLength = [encryptData length];
- dataIn = (constvoid *)[encryptData bytes];
- }
- /*
- DES加密 :用CCCrypt函式加密一下,然後用base64編碼下,傳過去
- DES解密 :把收到的資料根據base64,decode一下,然後再用CCCrypt函式解密,得到原本的資料
- */
- CCCryptorStatus ccStatus;
- uint8_t *dataOut = NULL; //可以理解位type/typedef 的縮寫(有效的維護了程式碼,比如:一個人用int,一個人用long。最好用typedef來定義)
- size_t dataOutAvailable = 0; //size_t 是操作符sizeof返回的結果型別
- size_t dataOutMoved = 0;
- dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
- dataOut = malloc( dataOutAvailable * sizeof(uint8_t));
- memset((void *)dataOut, 0x0, dataOutAvailable);//將已開闢記憶體空間buffer的首 1 個位元組的值設為值 0
- NSString *initIv = @"12345678";
- constvoid *vkey = (constvoid *) [key UTF8String];
- constvoid *iv = (constvoid *) [initIv UTF8String];
- //CCCrypt函式 加密/解密
- ccStatus = CCCrypt(encryptOperation,// 加密/解密
- kCCAlgorithmDES,// 加密根據哪個標準(des,3des,aes。。。。)
- kCCOptionPKCS7Padding,// 選項分組密碼演算法(des:對每塊分組加一次密 3DES:對每塊分組加三個不同的密)
- vkey, //金鑰 加密和解密的金鑰必須一致
- kCCKeySizeDES,// DES 金鑰的大小(kCCKeySizeDES=8)
- iv, // 可選的初始向量
- dataIn, // 資料的儲存單元
- dataInLength,// 資料的大小
- (void *)dataOut,// 用於返回資料
- dataOutAvailable,
- &dataOutMoved);
- NSString *result = nil;
- if (encryptOperation == kCCDecrypt)//encryptOperation==1 解碼
- {
- //得到解密出來的data資料,改變為utf-8的字串
- result = [[[NSString alloc] initWithData:[NSData dataWithBytes:(constvoid *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding] autorelease];
- }
- else//encryptOperation==0 (加密過程中,把加好密的資料轉成base64的)
- {
- //編碼 base64
- NSData *data = [NSData dataWithBytes:(constvoid *)dataOut length:(NSUInteger)dataOutMoved];
- result = [GTMBase64 stringByEncodingData:data];
- }
- return result;
- }
Base64.h
- //
- // GTMBase64.h
- //
- // Copyright 2006-2008 Google Inc.
- //
- // Licensed under the Apache License, Version 2.0 (the "License"); you may not
- // use this file except in compliance with the License. You may obtain a copy
- // of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- // License for the specific language governing permissions and limitations under
- // the License.
- //
- #import <Foundation/Foundation.h>
- #import "GTMDefines.h"
- // GTMBase64
- //
- /// Helper for handling Base64 and WebSafeBase64 encodings
- //
- /// The webSafe methods use different character set and also the results aren't
- /// always padded to a multiple of 4 characters. This is done so the resulting
- /// data can be used in urls and url query arguments without needing any
- /// encoding. You must use the webSafe* methods together, the data does not
- /// interop with the RFC methods.
- //
- @interface GTMBase64 : NSObject
- //
- // Standard Base64 (RFC) handling
- //
- // encodeData:
- //
- /// Base64 encodes contents of the NSData object.
- //
- /// Returns:
- /// A new autoreleased NSData with the encoded payload. nil for any error.
- //
- +(NSData *)encodeData:(NSData *)data;
- // decodeData:
- //
- /// Base64 decodes contents of the NSData object.
- //
-
相關推薦
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對