【问题标题】:A simple block cipher based on the SHA-256 hash function [closed]基于 SHA-256 哈希函数的简单分组密码 [关闭]
【发布时间】:2012-01-20 19:09:28
【问题描述】:

我想出了这个使用 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 );
}

【问题讨论】:

标签: hash cryptography sha256 encryption


【解决方案1】:

一个明显的弱点是,如果我能猜出任何块的明文 - 例如,如果您正在加密一个具有静态标题的 Word 文档 - 我可以解密以下所有块(只需将明文与密文异或产生状态)。

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

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 2014-08-19
    • 2017-07-18
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2016-07-13
    相关资源
    最近更新 更多