1. 程式人生 > >OC des加密演算法演算法實現

OC des加密演算法演算法實現

效果圖:


1.雙方約定好祕鑰

2.加密utl

//
//  EncryptUtl.m
//  L22test
//
//  Created by Liyanjun on 16/7/13.
//  Copyright © 2016年 Liyanjun. All rights reserved.
//

#import "EncryptUtl.h"
#import <CommonCrypto/CommonCryptor.h>
#import "GTMBase64.h"

@implementation EncryptUtl
#pragma mark- 產生金鑰
+(NSString *)makeKey{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyyMMdd HH:mm:ss"];
    
    
    NSDate *date = [NSDate date];
    
    
    NSString *firstDate = [dateFormatter stringFromDate:date];

    


    return firstDate;
}
#pragma mark- 加密演算法
const Byte iv[] = {1,2,3,4,5,6,7,8};
+(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key
{
    NSString *ciphertext = nil;
    NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
    NSUInteger dataLength = [textData length];
//    unsigned char buffer[1024];
    size_t bufferSize = dataLength + kCCBlockSizeDES;
    void *buffer = malloc(bufferSize);
    

    memset(buffer, 0, sizeof(char));
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding,
                                          [key UTF8String], kCCKeySizeDES,
                                          iv,
                                          [textData bytes], dataLength,
                                          buffer, bufferSize,
                                          &numBytesEncrypted);
    NSLog(@"cryptStatus=%d",cryptStatus);
    if (cryptStatus == kCCSuccess) {
        NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
        ciphertext = [GTMBase64 encodeBase64Data:data];
    }
    return ciphertext;
}
+(NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key
{
    NSString *plaintext = nil;
    NSData *cipherdata = [GTMBase64 decodeString:cipherText];
//    unsigned char buffer[102400];
     NSUInteger dataLength = [cipherdata length];
    size_t bufferSize = dataLength + kCCBlockSizeDES;
    void *buffer = malloc(bufferSize);
    memset(buffer, 0, sizeof(char));
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,
                                          kCCOptionPKCS7Padding,
                                          [key UTF8String], kCCKeySizeDES,
                                          iv,
                                          [cipherdata bytes], [cipherdata length],
                                          buffer, bufferSize,
                                          &numBytesDecrypted);
    if(cryptStatus == kCCSuccess) {
        NSData *plaindata = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
        plaintext = [[NSString alloc]initWithData:plaindata encoding:NSUTF8StringEncoding];
    }
    return plaintext;
}
@end


加密測試文件

//
//  main.m
//  L22test
//
//  Created by Liyanjun on 16/1/16.
//  Copyright © 2016年 Liyanjun. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "EncryptUtl.h"

#import "AppUtil.h"

//方法1
#define  POINT struct point
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        NSString* 
[email protected]
"測試加密資料"; NSString* [email protected]"b4196703d61af1bc87e20f2111143883"; NSLog(@"金鑰是%@",key); NSString* toString1=[EncryptUtl encryptUseDES:fromString key:key]; NSLog(@"加密後是%@",toString1); NSLog(@"解密後是%@",[EncryptUtl decryptUseDES:toString1 key:key]); } return 0; }


demo下載:

http://download.csdn.net/detail/liyanjun201/9749070

相關推薦

OC des加密演算法演算法實現

效果圖: 1.雙方約定好祕鑰 2.加密utl // // EncryptUtl.m // L22test // // Created by Liyanjun on 16/7/13. // Copyright © 2016年 Liyanjun. All right

DES加密解密演算法C語言程式碼實現

程式碼: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 /*------------------------ 5 定義列舉型全域性變數 6 -----

Java實現DES加密解密演算法

import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFact

網路安全學習之C語言版DES加密解密演算法的程式設計與實現

其實明白了DES演算法的流程程式設計實現是不難的,當然可能會在S盒實現那碰到點問題。下面的DES演算法包括加密和解密兩個功能,主要有生成16個子金鑰和DES演算法的主程式組成。輸出的資訊有16輪子金鑰以及每輪的中間值以及最後的結果。具體的程式碼中都有註釋,就看程式碼吧。關於D

C#寫Des加密解密演算法

馬上就要實習了,求大大們介紹工作。QQ:1028962069 原始碼地址 http://download.csdn.net/detail/h1028962069/8618367 我只寫關鍵程式碼。 介面如下 類 using System; using System.Col

php和c#一致的DES加密解密演算法

DES加解密演算法,在C#與PHP中的通用類。 注意: 1、類中的祕鑰key跟向量iv,均用的同樣的值 2、編碼均採用的utf-8 以下為具體程式碼,可以直接複製去進行實際測試 C#版程式碼: using System; using System.Data;

最簡單的DES加密算法實現

ava source bytes gen div this except vax odi Base64.java package com.mstf.des; import java.io.UnsupportedEncodingException; /*

DES加密:8051實現(C語言) & FPGA實現(VHDL+NIOS II)

本文將利用C語言和VHDL語言分別實現DES加密,並在8051和FPGA上測試。 終於有機會閱讀《深入淺出密碼學一書》,趁此機會深入研究了DES加密的思想與實現。本文將分為兩部分,第一部分為簡單的C語言實現,第二部分為FPGA實現並在NIOS II核上測試該模

DES加密解密->java實現

DES加密解密涉及到的JAVA類 Cipher 此類為加密和解密提供密碼功能。它構成了 Java Cryptographic Extension (JCE) 框架的核心。 為建立 Cipher 物件,應用程式呼叫 Cipher 的 getInstan

DES加密演算法的java實現(基於java類庫)

嗯嗯........這個是我新開的部落格上的第一篇的文章,這裡小白希望自己的技術能夠一天比一天好(p≧w≦q),加油! 好吧,現在來一個基於java類庫的DES加密演算法的實現吧~網上不少的程式碼要不執行有問題,要不就是簡簡單單內建一個固定的加密字串就簡單完事了。好吧,我承認我現在是為懶人服務

DES加密演算法Golang實現

DES介紹 資料加密標準(英語:Data Encryption Standard,縮寫為 DES)是一種對稱金鑰加密塊密碼演算法,1976年被美國聯邦政府的國家標準局確定為聯邦資料處理標準(FIPS),隨後在國際上廣泛流傳開來。它基於使用56位金鑰的對稱演算法。

[Python]實現DES加密演算法和3DES加密演算法

pyDes.py ############################################################################# # Documentation

基於java類庫的DES加密演算法實現

真正的核心程式碼就是呼叫java類庫實現的那部分 加密部分核心程式碼 //Cipher物件實際完成加密操作 Cipher cipher = Cipher.getInstance("DES"); //用密匙初始化Cipher物件,ENCRYPT_MODE用於

S-DES加密演算法介紹與實現

為了更好地理解DES演算法,美國聖克拉拉大學的Edward Schaefer教授於1996年開發了Simplfied DES方案,簡稱S-DES方案。它是一個供教學而非安全使用的加密演算法,它與DES的特性和結構類似,但引數小,明文分組為8位,主金鑰分組為10位

Java實現檔案的DES加密與解密演算法

一、基礎知識       根據金鑰型別不同將現代密碼技術分為兩類:對稱加密演算法(祕金鑰匙加密)和非對稱加密演算法(公開金鑰加密)。對稱鑰匙加密系統是加密和解密均採用同一把祕金鑰匙,而且通訊雙方都必須獲得這把鑰匙,並保持鑰匙的祕密。非對稱金鑰加密系統採用的加金鑰匙(公鑰)和

非對稱加密演算法實現ssh免密碼登入

**描述:利用非對稱加密演算法,實現兩臺主機之間可以免密碼直接登入 ,如下圖:** 整個實驗的原理如下圖: 具體步驟如下: 1、先準備好實驗需要的環境(兩臺虛擬機器–A:192.168.72.73,B:192.168.72.23),此時,我們遠端登入主機B,

資料的加密傳輸——微控制器上實現TEA加密解密演算法

http://www.eeworld.com.cn/mcu/article_2016121632367.html 各位大俠在做資料傳輸時,有沒有考慮過把資料加密起來進行傳輸,若在串列埠或者無線中把所要傳的資料加密起來,豈不是增加了通訊的安全性。常用的加密解密演算法比如DES、RSA等,受限於微控

MD5加密演算法Golang實現

什麼是MD5? MD5訊息摘要演算法(Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值,用於確保資訊傳輸完整一致。MD5有MD4、MD3、MD2改進而來,主要增強演算法複雜度和不可逆性。MD5廣泛使用在為檔案傳

Des 加密演算法java工具類

package com.lock.demo.service; import org.apache.tomcat.util.codec.binary.Base64; import javax.crypto.Cipher; import javax.crypto.SecretKey; import ja

base64加密演算法C++實現

  base64編碼原理:維基百科 - Base64   其實編碼規則很簡單,將字串按每三個字元組成一組,因為每個字元的 ascii 碼對應 0~127 之間(顯然,不考慮其他字符集編碼),即每個字元的二進位制以 8 bit 儲存,$ 3 \times 8 = 4 \times 6 $,這樣就可以很方便的轉