Я хочу зашифровать свой код с помощью режима AES_CBC в ios, у меня есть ссылка на код Android (в Android используется bouncycastle.crypto).
Я пытался использовать AESEncryption в ios. но я нашел одно отличие, они используются (SALT и ITERATION_COUNT), есть ли способ добавить в IOS (SALT и ITERATION_COUNT). Пожалуйста, помогите мне решить эту проблему
Android Reference:-
private static final int ITERATION_COUNT = 100;
private static final byte[] SALT = new byte[] { (byte) 28,
(byte) 116,
(byte) 95,
(byte) 222,
(byte) 35,
(byte) 65,
(byte) 43,
(byte) 20 };
inputData:-
//key: McBLVcxzJTtJ74yRouQ0bw==
//rawValue:
011101010010100101000111110010000000100101100110111110010010000000100010000101110001111000101110110111001000010110100001100011010110100111110010010011101011010011010100010111010010110011011010010010110011001101011001010110001011010011101000100001000100011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
public static byte[] encryptAesCbc(byte[] rawValue, String key) {
try {
CipherParameters chiperParams = getKey(key);
BufferedBlockCipher cipherEncrypt = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESEngine()));
cipherEncrypt.init(true, chiperParams);
return processData(rawValue, cipherEncrypt);
}
catch(Exception e) {
}
return new byte[0];
}
public static CipherParameters getKey(String key) {
final PBEParametersGenerator paramKeyGenerator = new PKCS12ParametersGenerator(new SHA256Digest());
paramKeyGenerator.init(PKCS12ParametersGenerator.PKCS12PasswordToBytes(key.toCharArray()), SALT, ITERATION_COUNT);
return paramKeyGenerator.generateDerivedParameters(Integer.parseInt("256"), Integer.parseInt("128"));
}
Выход:. 1000000000000000000000001000000000000000000010110000011100001011000001110000100000001101000010100000001110010110000000110000100100000111000011011000100100001000000000111001000000000011000010000000110000001101000011000000110110010011000000001010000000111011
1007 * // IOS код ссылки :-( Как добавить соль и граф итерация) 1009 * //Шифрует или дешифрует на основе CCOperation
- (NSData *) aes128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv ecb:(BOOL) ecb {
char keyPtr[kCCKeySizeAES128 + 1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
char ivPtr[kCCBlockSizeAES128 + 1];
bzero(ivPtr, sizeof(ivPtr));
if (iv) {
[iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
}
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus;
if (ecb) {
cryptStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, ivPtr, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted);
}
else {
cryptStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCBlockSizeAES128, ivPtr, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted);
}
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}