java ios 3des_iOS 3DES加密 和 java 3DES 解密

这篇博客介绍了如何在Objective-C(iOS)和Java中使用3DES算法进行加密和解密操作。在iOS端,代码展示了导入相关头文件,定义密钥和使用CCCrypt函数进行加密解密的过程。而在Java端,通过DESedeKeySpec和Cipher类实现了3DES的ECB模式加密解密。文章突出了跨平台加密通信的关键步骤和技术实现。
摘要由CSDN通过智能技术生成

首先进入头文件:#import

#import

#import

#define kChosenDigestLength CC_SHA1_DIGEST_LENGTH

#define DESKEY @"D6D2402F1C98E208FF2E863AA29334BD65AE1932A821502D9E5673CDE3C713ACFE53E2103CD40ED6BEBB101B484CAE83D537806C6CB611AEE86ED2CA8C97BBE95CF8476066D419E8E833376B850172107844D394016715B2E47E0A6EECB3E83A361FA75FA44693F90D38C6F62029FCD8EA395ED868F9D718293E9C0E63194E87"

-(NSString*)TripleDES:(NSString*)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt

{const void *vplainText;

size_t plainTextBufferSize;if (encryptOrDecrypt == kCCDecrypt)//解密

{

NSData*EncryptData =[GTMBase64 decodeData:[plainText dataUsingEncoding:NSUTF8StringEncoding]];

plainTextBufferSize=[EncryptData length];

vplainText=[EncryptData bytes];

}else //加密

{

NSData* data =[plainText dataUsingEncoding:NSUTF8StringEncoding];

plainTextBufferSize=[data length];

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);//memset((void *) iv, 0x0, (size_t) sizeof(iv));

const void *vkey = (const void *)[DESKEY UTF8String];//NSString *initVec = @"init Vec";//const void *vinitVec = (const void *) [initVec UTF8String];//Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};

ccStatus =CCCrypt(encryptOrDecrypt,

kCCAlgorithm3DES,

kCCOptionPKCS7Padding|kCCOptionECBMode,

vkey,

kCCKeySize3DES,

nil,

vplainText,

plainTextBufferSize,

(void *)bufferPtr,

bufferPtrSize,&movedBytes);//if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");

/*else if (ccStatus == kCC ParamError) return @"PARAM ERROR";

else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL";

else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE";

else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT";

else if (ccStatus == kCCDecodeError) return @"DECODE ERROR";

else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED";*/NSString*result;if (encryptOrDecrypt ==kCCDecrypt)

{

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

length:(NSUInteger)movedBytes]

encoding:NSUTF8StringEncoding]

autorelease];

}else{

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

result=[GTMBase64 stringByEncodingData:myData];

}returnresult;

}

java客户端 3DES 解密和加密算法public staticString encryptThreeDESECB(String src,String key) throws Exception

{

DESedeKeySpec dks= new DESedeKeySpec(key.getBytes("UTF-8"));

SecretKeyFactory keyFactory= SecretKeyFactory.getInstance("DESede");

SecretKey securekey=keyFactory.generateSecret(dks);

Cipher cipher= Cipher.getInstance("DESede/ECB/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, securekey);byte[] b=cipher.doFinal(src.getBytes());

BASE64Encoder encoder= newBASE64Encoder();return encoder.encode(b).replaceAll("\r", "").replaceAll("\n", "");

}//3DESECB解密,key必须是长度大于等于 3*8 = 24 位

public staticString decryptThreeDESECB(String src,String key) throws Exception

{//--通过base64,将字符串转成byte数组

BASE64Decoder decoder = newBASE64Decoder();byte[] bytesrc =decoder.decodeBuffer(src);//--解密的key

DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));

SecretKeyFactory keyFactory= SecretKeyFactory.getInstance("DESede");

SecretKey securekey=keyFactory.generateSecret(dks);//--Chipher对象解密

Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, securekey);byte[] retByte =cipher.doFinal(bytesrc);return newString(retByte);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值