美文网首页
iOS 3DES加密和解密的一些坑

iOS 3DES加密和解密的一些坑

作者: 东北小小猿 | 来源:发表于2017-09-30 15:02 被阅读62次

这个就是常用的3DES加密,百度有很多,我就直接截图了

这里说一下之前做3DES加密和解密中与后台配合的一些坑。

1. 确定好加密的方式是 ECB还是CBC

2.确定好补位方式

这里用的是kCCOptionPKCS7Padding补位方式,它的特点就是对加密的内容不满8位进行缺几位,用所缺位数进行补位。eg:原始数据为 FF FF FF FF FF FF FF FF FF FF FF FF FF,缺少3位,所以补位后为FF FF FF FF FF FF FF FF FF FF FF FF FF 03 03 03。但是如果后台的补位方式是自己定义的,那这个时候坑就来了。(1)把kCCOptionPKCS7Padding补位方式去掉!(2)对数据进行判断,然后自行补位

这里我随便写了一个自定义的补位:不满8位,第一位补0x60,其余补0x00

3.确定好密钥转NSData的方式

这块我就碰到了坑,后台给的是一个十六进制的字符串,它是直接用的这个16进制。而我按照百度直接拿这个字符传进行了utf8转成data,结果悲剧了。所以问清楚后台给你的密钥应该怎样转化为data。

最后粘一下我加解密中用到的一些方法

//int 转 data

+ (NSData*)little_intToByteWithData:(int)i andLength:(int)len{

Byte abyte[len];

if(len ==1) {

abyte[0] = (Byte) (0xff& i);

}else if(len ==2) {

abyte[1] = (Byte) (0xff& i);

abyte[0] = (Byte) ((0xff00& i) >>8);

}else{

abyte[3] = (Byte) (0xff& i);

abyte[2] = (Byte) ((0xff00& i) >>8);

abyte[1] = (Byte) ((0xff0000& i) >>16);

abyte[0] = (Byte) ((0xff000000& i) >>24);

}

NSData*adata = [NSData dataWithBytes:abytelength:len];

return adata;

}

//取反

+(NSData*)getFanByte:(NSData*)data{

NSInteger length = data.length;

Byte res[length];

Byte*src = (Byte*)[data bytes];

for(int i =0; i

res[i] = ~(src[i]);

}

NSData*resultData = [NSData dataWithBytes:res length:length];

return resultData;

}

//16进制字符串转data

+ (NSData*)convertHexStrToData:(NSString*)str {

if(!str || [strlength] ==0) {

return nil;

}

NSMutableData*hexData = [[NSMutableData alloc]initWithCapacity:8];

NSRange range;

if([strlength] %2==0) {

range =NSMakeRange(0,2);

}else{

range =NSMakeRange(0,1);

}

for(NSIntegeri = range.location; i < [strlength]; i +=2) {

unsigned int anInt;

NSString*hexCharStr = [str substringWithRange:range];

NSScanner*scanner = [[NSScanner alloc]initWithString:hexCharStr];

[scanner scanHexInt:&anInt];

NSData*entity = [[NSData alloc]initWithBytes:&anIntlength:1];

[hexData appendData:entity];

range.location+= range.length;

range.length=2;

}

return hexData;

}

//data转16进制字符串

+ (NSString*)convertDataToHexStr:(NSData*)data {

if(!data || [data length] ==0) {

return@"";

}

NSMutableString*string = [[NSMutableString alloc]initWithCapacity:[data length]];

[data enumerateByteRangesUsingBlock:^(constvoid*bytes,NSRange byteRange,BOOL*stop) {

unsigned char*dataBytes = (unsigned char*)bytes;

for(NSIntegeri =0; i < byteRange.length; i++) {

NSString*hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) &0xff];

if([hexStr length] ==2) {

[string appendString:hexStr];

}else{

[string appendFormat:@"0%@", hexStr];

}

}

}];

return string;

}

相关文章

  • Laravel 3DES (php、java、android、i

    Laravel 3DES Laravel 3DES加密解密,和java,ios互通 安装方法 配置方法 app.p...

  • iOS常用加解密方式

    AES128 AES128加密 AES128解密 3DES 3DES加密 3DES解密 DES DES加密 DES解密

  • Android Des/3DES加解密

    1、3DES加解密 DES加密分为 单DES和 3DES加密 单DES加密是8个字节长度加密 3DES加密分为:双...

  • iOS 3DES加密和解密的一些坑

    这个就是常用的3DES加密,百度有很多,我就直接截图了 这里说一下之前做3DES加密和解密中与后台配合的一些坑。 ...

  • 【uniapp】Vue.js CryptoJs 中的 3des

    最近改写 uniapp 时候用到了 3des 加密解密,网上找了好多资料好多写的都是 des 加解密,3des和d...

  • IOS的签名机制

    前言 了解IOS的数字签名机制之前我们需要掌握以下几个知识:加密解密(对称加密(DES 3DES AES),非对称...

  • iOS 签名机制

    前言 学习iOS签名机制,可参考如下学习路线: 加密解密(对称DES 3DES AES、非对称RSA)--->单向...

  • 3DES加密

    本文介绍了3DES加密特性,加密特点,3DES是对称加密,用一个密钥对内容进行加密,必须使用相同的密钥进行解密, ...

  • 对称加密 和 非对称加密、的区别:

    对称加密: DES,3DES,ADE 算法是公开的 一个秘钥加密,只能用这个秘钥解密 加密解密的速度快,适合...

  • 密码学及iOS签名(一) —— 加密解密

    加密解密类型 对称加密 公钥密码(非对称加密) 对称加密(常见的DES、 3DES、AES) 在对称密码中,加密、...

网友评论

      本文标题:iOS 3DES加密和解密的一些坑

      本文链接:https://www.haomeiwen.com/subject/beggextx.html