Как расшифровать данные AES / ECB / Nopadding с помощью C / C ++? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть строка ключа и секретная строка.

ключ: e23c51348e454515
secret: krZYd73dKRmWDOzjrdzH6KybIItDfYp / PHORDyEzwCw =

1015 с разрешением успешно код, как это:

   /**
     * AES Decrypt 
     *
     * @param data: secret
     * @param key: key 
     * @return
     */
    public static String decryptEBC(String data, String key) {
        try {
            SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] encrypted1 = Base64.decode(data, Base64.DEFAULT);
            byte[] decryptData = cipher.doFinal(encrypted1);
            return new String(decryptData);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

Но я не могу расшифровать его с помощью кода c, мой код:

int aes128_ecb_decrypt(const uint8_t *key, uint8_t *in, int in_len, uint8_t *out) 
{
    int outlen;
    int temp;

    EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
    EVP_CIPHER_CTX_init(ctx);
    EVP_CIPHER_CTX_set_padding(ctx, 1);

    if (!EVP_DecryptInit_ex(ctx, EVP_aes_128_ecb(), 0, key, NULL)) 
    {
        return -1;
    }

    if (!EVP_DecryptUpdate(ctx, out, &outlen, in, in_len))
    {
        return -2;
    }

    if (!EVP_DecryptFinal_ex(ctx, out + outlen, &temp)) {
        return -3;    // it stoped here
    }

    outlen += temp;

    EVP_CIPHER_CTX_cleanup(ctx);

    return outlen;
}

Что не так?

...