3DES 加密 解密

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c91b13 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1d9421 }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; min-height: 21.0px }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c32275 }
span.s1 { color: #822e0e }
span.s2 { }
span.s3 { font: 18.0px "PingFang SC" }
span.s4 { color: #c32275 }
span.s5 { color: #6122ae }

#import <Foundation/Foundation.h>

//3DES加密

@interface JKEncrypt : NSObject

-(NSString *)doEncrypt:(NSString *)plainText;

-(NSString*)doDecEncrypt:(NSString *)encryptText;

@end

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1d9421 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; min-height: 21.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c91b13 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #822e0e }
p.p5 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #1d9421 }
p.p6 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #c32275 }
p.p7 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo }
p.p8 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3d1d81 }
p.p9 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #703daa }
p.p10 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #6122ae }
span.s1 { }
span.s2 { font: 18.0px "PingFang SC" }
span.s3 { color: #822e0e }
span.s4 { color: #c91b13 }
span.s5 { color: #1d9421 }
span.s6 { font: 18.0px "PingFang SC"; color: #1d9421 }
span.s7 { font: 18.0px Menlo }
span.s8 { color: #000000 }
span.s9 { color: #6122ae }
span.s10 { color: #703daa }
span.s11 { color: #3d1d81 }
span.s12 { color: #c32275 }
span.s13 { color: #0435ff }
span.s14 { color: #78492a }

//

//  main.m

//  3DES研究

//

//  Created by apple on 15/10/22.

//  Copyright ? 2015年 apple. All rights reserved.

//

#import "JKEncrypt.h"

#import <CommonCrypto/CommonDigest.h>

#import <CommonCrypto/CommonCryptor.h>

#import <Security/Security.h>

//密匙 key

#define gkey            @"123456788765432112345678"  //24位的密钥

//偏移量

#define gIv             @"jukai"

@implementation JKEncrypt

-(NSString *)doEncrypt:plainText{

//把string 转NSData

NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];

//length

size_t plainTextBufferSize = [data length];

const void *vplainText = (const void *)[data bytes];

CCCryptorStatus ccStatus;

uint8_t *bufferPtr = NULL;

size_t bufferPtrSize = 0;

size_t movedBytes = 0;

bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);

bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));

memset((void *)bufferPtr, 0x0, bufferPtrSize);

const void *vkey = (const void *) [gkey UTF8String];

//偏移量

const void *vinitVec = (const void *) [gIv UTF8String];

//配置CCCrypt

ccStatus = CCCrypt(kCCEncrypt,

kCCAlgorithm3DES, //3DES

kCCOptionECBMode|kCCOptionPKCS7Padding, //设置模式

vkey,    //key

kCCKeySize3DES,

//                       vinitVec,     //偏移量,这里不用,设置为nil;不用的话,必须为nil,不可以为@“” 解密算法里也应该为nil,也不可以为@“”

nil,     //偏移量,这里不用,设置为nil;不用的话,必须为nil,不可以为@“”

vplainText,

plainTextBufferSize,

(void *)bufferPtr,

bufferPtrSize,

&movedBytes);

NSData *myData = [NSData dataWithBytes:(const char *)bufferPtr length:(NSUInteger)movedBytes];

NSUInteger          len = [myData length];

char *              chars = (char *)[myData bytes];

NSMutableString *   hexString = [[NSMutableString alloc] init];

for(NSUInteger i = 0; i < len; i++ )

[hexString appendString:[NSString stringWithFormat:@"%0.2hhx", chars[i]]];

return hexString;

}

-(NSString*)doDecEncrypt:(NSString *)hexString{

//十六进制转NSData

long len = [hexString length] / 2;

unsigned char *buf = malloc(len);

unsigned char *whole_byte = buf;

char byte_chars[3] = {‘\0‘,‘\0‘,‘\0‘};

int i;

for (i=0; i < [hexString length] / 2; i++) {

byte_chars[0] = [hexString characterAtIndex:i*2];

byte_chars[1] = [hexString characterAtIndex:i*2+1];

*whole_byte = strtol(byte_chars, NULL, 16);

whole_byte++;

}

NSData *encryptData = [NSData dataWithBytes:buf length:len];

size_t plainTextBufferSize = [encryptData length];

const void *vplainText = [encryptData bytes];

CCCryptorStatus ccStatus;

uint8_t *bufferPtr = NULL;

size_t bufferPtrSize = 0;

size_t movedBytes = 0;

bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);

bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));

memset((void *)bufferPtr, 0x0, bufferPtrSize);

const void *vkey = (const void *) [gkey UTF8String];

const void *vinitVec = (const void *) [gIv UTF8String];

ccStatus = CCCrypt(kCCDecrypt,

kCCAlgorithm3DES,

kCCOptionPKCS7Padding|kCCOptionECBMode,

vkey,

kCCKeySize3DES,

nil,

vplainText,

plainTextBufferSize,

(void *)bufferPtr,

bufferPtrSize,

&movedBytes);

NSString *result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr

length:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding];

return result;

}

@end

时间: 2024-10-11 12:58:43

3DES 加密 解密的相关文章

C# Java 3DES加密解密 扩展及修正\0 问题

注: C#已亲测及做扩展, Java 部分未做验证 /// <summary> /// 3DES加密解密 /// ----------------------------------------------------------- /// 说明: /// 转载自网上http://bbs.csdn.net/topics/350158619 /// 并加以扩展 /// 修正: /// 1. 修改正解密后出现 '\0' /// 注: 1. 向量不能小于8位 /// 2. 明文末尾如果是带'\0'字

iOS 3DES加密解密(一行代码搞定)

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解:3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法. 3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密.数据加密标

简进祥==iOS 3DES加密解密

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解:3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法. 3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密.数据加密标

3DES 加密解密

/// <summary> /// 3DES 加密解密 /// </summary> class Encrypt { public static string EncryptString(string Value, string txtKey, string txtIV) { SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); mCSP.Key = Encoding.UTF8.GetBytes(txtKey

C# 3DES加密解密,差点要了命

最近 一个项目.net 数据采用3DES加密.下面分享一下,这里的KEY采用Base64编码,便用分发,c#的Byte范围是0-255核心是确定Mode和Padding,关于这两个的意思可以搜索3DES算法相关文章一个是C#采用CBC Mode,PKCS7 Padding另一个是C#采用ECB Mode,PKCS7 Padding对字符加密时,采用的是UTF-8编码 下面是C#代码 /// <summary> /// DES3加密解密 /// </summary> public c

JAVA和C# 3DES加密解密

原文转自:http://blog.csdn.net/sdfkfkd/article/details/6004847 最近 一个项目.net 要调用Java的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题,下面分享一下,这里的KEY采用Base64编码,便用分发,因为Java的Byte范围为-128至127,c#的Byte范围是0-255核心是确定Mode和Padding,关于这两个的意思可以搜索3DES算法相关文章一个是C#采用CBC Mode,PKCS7 Pa

PBOC圈存时用到3DES加密解密以及MAC计算方法

最近在做PBOC圈存时用到了3DES的加密解密以及MAC计算问题,在网上了解一些知识,复制了一些demo学习,我这里没有深入研究,只是把我用到的和了解的做个总结,便于以后使用和学习. 3DES分双倍长和三倍长,我使用到的是双倍长,加密模式为ECB,代码如下 public static class EncryptUtils { //构造一个对称算法 private static SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider

C# 3DES加密 解密

/// <summary> ///3DES加密 /// </summary> /// <param name="originalValue">加密数据</param> /// <param name="key">24位字符的密钥字符串</param> /// <param name="IV">8位字符的初始化向量字符串</param> /// <

.NET与 java通用的3DES加密解密方法

C#代码 private void button1_Click(object sender, EventArgs e) { string jiami = textBox1.Text; textBox2.Text= DESEnCode(jiami, "11111111"); } public static string DES_Key = "11111111"; #region DESEnCode DES加密 public static string DESEnCod