Просто интересно, почему тот же простой текст, зашифрованный в Java и C, не генерирует такой же шифрованный текст. Для DES алгоритмом я заметилDES encrypt in C/C++ vs Java
вход text = "text", key = "test"
С шифрованный текст len = 24
Java создает шифрованный текст len = 8
Для 256bit AES я заметил подобную разницу
С шифрованный текст len = 32
Java генерирует зашифрованный текст len = 16
вот мой код «C»
char* enc(const char* text, const char* keyStr)
{
EVP_CIPHER_CTX ctx;
unsigned char key[32] = {0};
unsigned char iv[16] = {0};
unsigned char in[16] = {0};
unsigned char out[32]; /* at least one block longer than in[] */
memset(out, 0, 32);
int outlen1, outlen2;
memcpy(in, text, strlen(text));
memcpy(key, keyStr, strlen(keyStr));
EVP_EncryptInit(&ctx, EVP_aes_256_cbc(), key, iv);
EVP_EncryptUpdate(&ctx, out, &outlen1, in, sizeof(in));
EVP_EncryptFinal(&ctx, out + outlen1, &outlen2);
char* ret = (char*)malloc(outlen1 + outlen2+1);
memset(ret, 0, outlen1 + outlen2+1);
memcpy(ret, out, outlen1 + outlen2);
EVP_CIPHER_CTX_cleanup(&ctx);
return ret;
}
Вот «Java» код
public static byte[] enc(byte[] input, byte[] keyStr){
byte[] output = null;
try {
byte[] newKey = getByteArrays(keyStr, 0, 32);
SecretKey secretKey = new SecretKeySpec(newKey, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
String ivStr = "";
byte[] ivKey = getByteArrays(ivStr.getBytes("UTF-8"), 0, 16);
IvParameterSpec ips = new IvParameterSpec(ivKey);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ips, null);
output = cipher.doFinal(input);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return output;
}
У меня есть список записей зашифрован, используя C, я хочу, чтобы расшифровать эти записи в Java.
ОБНОВЛЕНО
следующее обновление помогло получить такую же длину, как в 'C' и 'JAVA'
EVP_EncryptUpdate (& CTX, из, & outlen1, в, STRLEN (текст));
Нет Просто интересно, почему шифротекст возвращаемый «C» и «JAVA» различен для того же текст и ключа, я жду их тоба же
В коде Java вы уверены, что ваш IV - это все нули? Вы уверены, что ваш объект шифрования находится в режиме CBC? – zindorsky