【问题标题】:Is Encryption-Decryption irreversable加解密是不可逆的吗
【发布时间】:2014-09-29 09:02:26
【问题描述】:

我正在尝试使用加密和解密算法来处理一个问题,我使用下面的程序来测试我的要求,我发现了一个奇怪的问题。

我正在使用 polarssl 来满足我的加密和解密需求。

正如您首先看到的那样,我用“iv”和“key”加密了“plain”变量并找到了结果。 其次,我用“iv”和“key”解密了一个数组。

当我解密“encryptedValue”时,我找到了“plain”数组,但是当我加密“plain”时,我找不到“encryptedValue”。

这可能是什么问题?

#include <stdio.h>
#include <polarssl/aes.h>

const int ENCRIPTION = 1;
const int DECRIPTION = 0;

void printByteArray(unsigned char * array, int length) {
    int i = 0;
    for (i = 0; i < length; i++) {
        printf("%x ", array[i]);
    }
    printf("\n");
}

void encrypt() {
    unsigned char o[32];


    unsigned char key[16] = { 0x03, 0xC9, 0xD8, 0xE6, 0x01, 0xA5, 0x05,
            0x9F, 0x11, 0xBF, 0x44, 0x9D, 0xF9, 0x55, 0x18, 0xED

    };

    unsigned char iv[16] = { 0x03, 0xB5, 0x62, 0x57, 0xC8, 0x69, 0x22, 0x89,
            0xF4, 0x96, 0x2B, 0x05, 0x44, 0x2B, 0xD0, 0xA7

    };

    unsigned char plain[32]=
    {
      0xA2, 0xD8, 0x69, 0x9C, 0x77, 0x73, 0xC7, 0x5E, 0x1D, 0x3B, 0x83, 0x26, 0x6E, 0x2F, 0x35, 0x30,
      0x9D, 0xF0, 0xF2, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    };

    aes_context aesCtx;

    aes_setkey_dec(&aesCtx, key, 128);
    aes_crypt_cbc(&aesCtx, ENCRIPTION, 32, iv, plain, o);

    printf("Encryption result, encrypted value:\n");
    printByteArray(o, 32);
}

decrypt() {

    unsigned char o[32];

    unsigned char key[16] = { 0x03, 0xC9, 0xD8, 0xE6, 0x01, 0xA5, 0x05,
            0x9F, 0x11, 0xBF, 0x44, 0x9D, 0xF9, 0x55, 0x18, 0xED

    };

    unsigned char iv[16] = { 0x03, 0xB5, 0x62, 0x57, 0xC8, 0x69, 0x22, 0x89,
            0xF4, 0x96, 0x2B, 0x05, 0x44, 0x2B, 0xD0, 0xA7

    };

    unsigned char encryptedValue[32] = { 0x11, 0x22, 0x07, 0x86,
            0xA2, 0xD3, 0xED, 0x95, 0xB9, 0x14, 0xC0, 0x57, 0xF7, 0xAF, 0x5F,
            0xDC, 0x93, 0x66, 0x77, 0x68, 0x44, 0x12, 0x9F, 0x1B, 0x72, 0x6A,
            0xEA, 0x51, 0xB8, 0xF7, 0x1D, 0xA4 };

    aes_context aesCtx;

    aes_setkey_dec(&aesCtx, key, 128);
    aes_crypt_cbc(&aesCtx, DECRIPTION, 32, iv, encryptedValue,
            o);

    printf("Decryption result, plain array:\n");
    printByteArray(o, 32);

}

int main() {

    encrypt();
    decrypt();
}

【问题讨论】:

  • 您似乎将 散列加密 混为一谈。它们不是一回事......
  • 我认为你需要整体阅读问题,没有与哈希相关的功能。可能你误解了 printf 函数文本。
  • 好的,但是您的代码引用了盐(和哈希)...
  • 我刚刚为您更改了变量名。您现在可以查看。

标签: c encryption cryptography polarssl


【解决方案1】:

encrypt()函数这部分有错误:

aes_setkey_dec(&aesCtx, key, 128);
aes_crypt_cbc(&aesCtx, ENCRIPTION, 32, iv, plain, o);

如果你检查API documentation for AES,你会看到有两个不同的函数用于设置加密和解密的密钥。

要设置加密密钥时,应使用aes_setkey_enc() 而不是aes_setkey_dec()

那么o中的结果和你解密的一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2019-10-20
    • 2017-04-17
    • 2018-04-11
    相关资源
    最近更新 更多