我試圖使用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?
可能有助於提供示例輸入數據和預期輸出。 –