Android と iOS で 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);
この暗号化の問題を解決するのを手伝ってくれる人はいますか?