编码-DES解密,16位key,解密返回nil

问题描述

DES解密,16位key,解密返回nil

本人在开发中遇到一个des加解密的问题。先上代码
#import "DesEncryption.h"
#import
#import "GTMBase64.h"

@implementation DesEncryption
#pragma mark +++++
//8位key解密有效(已验证)
+(NSString*) DecryptUseDES:(NSString*)cipherText key:(NSString*)key {
// 利用 GTMBase64 解碼 Base64 字串
NSData* cipherData = [GTMBase64 decodeString:cipherText];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted = 0;

// IV 偏移量不需使用
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                      kCCAlgorithmDES,
                                      kCCOptionPKCS7Padding| kCCOptionECBMode,
                                      [key UTF8String],
                                      kCCKeySizeDES,
                                      nil,
                                      [cipherData bytes],
                                      [cipherData length],
                                      buffer,
                                      1024,
                                      &numBytesDecrypted);
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
    NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
    plainText = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
}
return plainText;

}
////8位key加密有效(已验证)
+(NSString *) EncryptUseDES:(NSString *)clearText key:(NSString *)key
{
NSData *data = [clearText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;

CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                      kCCAlgorithmDES,
                                      kCCOptionPKCS7Padding| kCCOptionECBMode,
                                      [key UTF8String],
                                      kCCKeySizeDES,
                                      nil,
                                      [data bytes],
                                      [data length],
                                      buffer,
                                      1024,
                                      &numBytesEncrypted);

NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
    NSData *dataTemp = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
    plainText = [GTMBase64 stringByEncodingData:dataTemp];
}else{
    NSLog(@"DES加密失败");
}
return plainText;

}
例如:秘钥:abcdefgh
明文:123456
密文:sHTd/9exYuk=

如果秘钥换成:abcdefghabcdefgh
明文:123456
密文:WcbWa42yxuo=

不做任何改动,依旧用上面的解密方法 ,返回的plainText 是nil
期间试图改变kCCKeySizeDES为kCCKeySizeAES128(因为考虑到秘钥长度变为16位),可是结果还是徒劳,
本人尝试改变CCCryptorStatus里面的各种参数,一无所获,特发此贴求助

时间: 2024-08-05 02:48:36

编码-DES解密,16位key,解密返回nil的相关文章

各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

原文:各种加密解密函数(URL加密解密.sha1加密解密.des加密解密) 普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语言时这类可逆函数非常难搞定.所以这时尽量使用AES DES RC4 Rabbit TripleDes这些方法. 包含超时的加密解密函数 1 /** 2 * 加密 3 * @param string $string 要加密或解密的字符串 4 * @param string $operation 加密

采用Cipher DES针对文件加密、解密

由于经常用一些加密或者解密文件的,所以写了一个简单的采用Cipher DES针对文件加密.解密的工具类,记录一下,防止以后忘记了! import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStrea

字符集-JavaScript字符串长度是字符长度还是16位编码长度?

问题描述 JavaScript字符串长度是字符长度还是16位编码长度? 根据<JavaScript权威指南>39页上所写的: 但是我试验了一下,发现e.length是1 啊 有人能给我解释一下嘛,感谢 解决方案 ud835udc52不是字母e 解决方案二: 就是包含的字符个数,跟内码没关系 解决方案三: 看得入迷了楼主,字符串的length属性就是有多少个字符,不要和内码混一起了

我用3DES加密后怎么样才能得到16位的密文

问题描述 明文:12345678秘钥:12345678909876543212345678909876进过计算出来的密文:iGNoZSrV2gnYK7x4ogdzdQ==我现在想让这个密文显示成由0到9,A到F里面的数组成的16位的密文.求解应该怎么弄.最好有代码谢谢各位啦! 解决方案 解决方案二:急求,在线等解决方案三:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Security.Crypto

有哪位大神能指导下有哪种算法可以将十六进制的32位的加密成16位的吗,并且是可逆的加密,急求啊

问题描述 MD5是可以,但是是不可逆的.不能解密成原文.貌似3DES和DES加密结果是32,24位什么的我这里的需求是用3DES加密16位的明文,也要得到16位的密文.还要通过3DES解密回去.现在是得到了一个32位的密文 解决方案 解决方案二:自己来顶顶咯

ArcFour加密解密,java RC4加密解密,java 加密解密

 package com.app.common.util; public class ArcFour { /** * 加密解密 参数为String 字符串(String data, String key) * * @param data * @param key * @return String * @throws UnsupportedEncodingException */ public static final int vactorLen = 256; private static S

MASM-两个16位二进制数减法模拟

功能说明:输入两组16位二进制代码模拟两为16位二进制整数,对其求差并以16进制输出. 基本算法:采用补码,模拟二机制减法(加法类同),得到差(补码)转换成原码后,转化成十六进制并输出.16为二进制转换成4为十六进制数的方法是采用:将16位二进制分成4组,每组由连续4位二进制组成,模拟4位二进制到一位十六进制转换,将每组转换成16进制数并输出.详见代码 本代码在MASM.5调试通过 运行界面: 如 binary(YuanMa) num1=1000000000001011 ;被减数原码binary

使用GCC和GNU Binutils编写能在x86实模式运行的16位代码

使用GCC和GNU Binutils编写能在x86实模式运行的16位代码 不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解GCC生成16位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在x86实模式下运行的16位代码,这个话题确实有点复古,所以能找到的资料也相应较少.要运行x86实模式的程序,目 前我知道的只有两种方式,一种是使用DOS系统,另一种是把它写成引导扇区的代码,在系统启动时直接运行.很显然,许多讲自己实现操作系统的书籍都会讲到

用java实现-16位的CRC校验 ,把C实现的,用JAVA实现

问题描述 16位的CRC校验 ,把C实现的,用JAVA实现 //本部分的定义需要根据不同的编译器进行修改 //U8 U16 U32分别表示8位.16位.32位无符号数值 #define U8 unsigned char #define U16 unsigned short #define U32 unsigned int #endif //C文件部分 U16 Crc16CCITT_Table[16]={ /* CRC 16bit余式表 */ 0x0000, 0x1021, 0x2042, 0x3