Encryption 直接使用散列值进行加密不是一个好主意吗?

Encryption 直接使用散列值进行加密不是一个好主意吗?,encryption,hash,Encryption,Hash,例如,sha-256生成的散列值直接用于这样的特定字节数组 void Run(CryptoArray& plain, CryptoArray& key) { uint8_t *hash = Sha256::FromArray(key.getArray(), key.getSize()); size_t round = plain.getSize() / 8; size_t remain = plain.getSize() % 8; for (size_t i =

例如,sha-256生成的散列值直接用于这样的特定字节数组

void Run(CryptoArray& plain, CryptoArray& key)
{
  uint8_t *hash = Sha256::FromArray(key.getArray(), key.getSize());
  size_t round = plain.getSize() / 8;
  size_t remain = plain.getSize() % 8;
  for (size_t i = 0; i < round; i++)
    ((uint64_t *)plain.getArray())[i] ^= ((uint64_t *)hash)[i % 8];

  uint8_t *arr = plain.getArray() + round * 8;
  for (size_t i = 0; i < remain; i++)
    arr[i] ^= hash[i];
}
void运行(加密数组和普通、加密数组和密钥)
{
uint8_t*hash=Sha256::FromArray(key.getArray(),key.getSize());
size\u t round=plain.getSize()/8;
size\u t remain=plain.getSize()%8;
对于(尺寸i=0;i
如果在遥远的将来发明了2^2048位计算机(或使用biginteger),那么这个问题就可以并行化,并且很容易解决。然而,我知道这个简单的hash crpyto函数和通用的加密函数都是为了使密码难以发挥最大的作用


如果是这样,开发人员是否添加了一些附加功能,以增加使用这些功能(AES、DES等)获取密码所需的时间?如果不是,单独使用哈希函数是否存在致命问题?我看到的所有程序都没有像这样使用哈希函数。

我认为了解算法之间的差异会有所帮助。

我认为了解算法之间的差异会有所帮助。

基本上,你有一个非常非常非随机的密钥流。你还有一个缓冲区溢出。您将
哈希
视为8个64位值的数组-即512位,而Sha-256产生256位(因此得名)。我不明白您在问什么?哈希和加密是两种根本不同的数据编码形式。它们有不同的行为和用途。无论哪种方式,你的问题与任何特定语言无关,不管你是否包含C++代码。对不起,我编辑了我的问题。你知道有专用的和姐妹网站,对吧?这绝不是一个编程问题。基本上,你有一个非常非常非随机的密钥流。你还有一个缓冲区溢出。您将
哈希
视为8个64位值的数组-即512位,而Sha-256产生256位(因此得名)。我不明白您在问什么?哈希和加密是两种根本不同的数据编码形式。它们有不同的行为和用途。无论哪种方式,你的问题与任何特定语言无关,不管你是否包含C++代码。对不起,我编辑了我的问题。你知道有专用的和姐妹网站,对吧?这绝不是一个编程问题。实际上是一个注释,而不是答案。实际上是一个注释,而不是答案。
void Run(CryptoArray& plain, CryptoArray& key)
{
  uint8_t *hash = Sha256::FromArray(key.getArray(), key.getSize());
  size_t round = plain.getSize() / 8;
  size_t remain = plain.getSize() % 8;
  for (size_t i = 0; i < round; i++)
    ((uint64_t *)plain.getArray())[i] ^= ((uint64_t *)hash)[i % 8];

  uint8_t *arr = plain.getArray() + round * 8;
  for (size_t i = 0; i < remain; i++)
    arr[i] ^= hash[i];
}