我试图使用RC2算法在Android和iOS中使用PKCS7填充来加密数据,但结果不同。iOS和Android中的RC2和PKCS7加密
我需要得到确切的结果。 KEY和IV已经提供,但我不知道如何处理它们。我需要获得与ios中的代码相同的结果。
值
IV = "11223344"
KEY = "Sample"
IOS代码:
NSString *iv = IV ;
NSData *data = [s dataUsingEncoding:NSASCIIStringEncoding];
//key
NSString *key = KEY;
const char *keyPtr = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cIv = [iv cStringUsingEncoding:NSASCIIStringEncoding];
NSUInteger dataLength = [data length];
size_t bufferSize = dataLength + kCCBlockSizeRC2;
void *buffer = malloc(bufferSize);
//kCCBlockSizeAES128
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmRC2,
kCCOptionPKCS7Padding,keyPtr,
[key length],
cIv,
[data bytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
的Android代码:
SecretKeySpec skeySpec = new SecretKeySpec(Constant.RC2_KEY.getBytes("US-ASCII"), "PBEWITHSHAAND128BITRC2-CBC");
IvParameterSpec iv = new IvParameterSpec(Constant.RC2_IV.getBytes("US-ASCII"));
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(data);
return encrypted;
有了这个代码,该cipher.init()不执行,并将其结果一个错误。但是当我将“AES/CBC/PKCS7Padding”或“AES/CBC/PKCS5Padding”改为“PBEWITHSHAAND128BITRC2-CBC”它没有。它对数据进行加密,但与ios代码的结果不同。
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
任何人都可以请帮我解决这个加密thingy?
可能有助于提供示例输入数据和预期输出。 –