一种基于SHA-256哈希函数的简单分组密码

时间:2012-01-20 10:19:38

标签: hash cryptography sha256 encryption

我已经提出了使用SHA-2(在本例中为SHA-256)哈希函数进行加密的这个小例程。因此,它是具有256位(32字节)块大小和任意密钥长度的分组密码。很容易看出你可以替换哈希函数并获得一种全新的算法类型。

我想知道这个结构中是否存在任何问题,特别是缺陷,以及是否已经研究过这种类型的算法。

#include <openssl/sha.h>

struct sha_crypt_state {
    unsigned char digest[SHA256_DIGEST_LENGTH];
};

void sha_crypt_set_key( sha_crypt_state *state, unsigned char *key, int key_length )
{
    SHA256( key, key_length, state->digest );
}

void sha_crypt( sha_crypt_state *state, unsigned char *block )
{
    sha_crypt_state temp;
    SHA256( state->digest, sizeof(state->digest), temp.digest );
    memcpy( state->digest, temp.digest, sizeof(temp.digest) );

    for ( int i = 0; i < sizeof(state->digest); ++i ) {
        block[i] ^= state->digest[i];
    }
}

void sha_crypt_test()
{
    const char *key = "secret";

    // prepare a test block
    char block[SHA256_DIGEST_LENGTH];
    memset( block, 0, sizeof(block) );
    strcpy( block, "Hello, testing encryption!" );

    // test encrypt
    sha_crypt_state state;
    set_key( &state, (unsigned char *)key, strlen(key) );
    sha_crypt( &state, (unsigned char *)block );

    // test decrypt
    set_key( &state, (unsigned char *)key, strlen(key) );
    sha_crypt( &state, (unsigned char *)block );
}

1 个答案:

答案 0 :(得分:1)

一个明显的缺点是,如果我能猜出任何块的明文 - 例如,如果你正在加密一个具有静态头文件的Word文档 - 我可以解密以下所有块(只是用明文和明文的x文本)产生状态)。

基于散列函数的分组密码通常仅使用散列算法的压缩函数。一个例子是SHACAL-2,它与您的算法一样基于SHA-256。