【发布时间】: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 );
}
【问题讨论】:
-
这个问题最好在crypto.stackexchange.com 上提出,尽管我怀疑你得到的主要答案是“不要重新发明轮子”
-
谢谢,我也发一下。
标签: hash cryptography sha256 encryption