我正在尝试在 Android 和 iOS 中使用带有 PKCS7 填充的 RC2 算法来加密数据,但结果不同。
我需要得到确切的结果。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);
安卓代码:
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);
谁能帮我解决这个加密问题?