代码之家  ›  专栏  ›  技术社区  ›  user6492553

如何使用以sha256哈希作为密钥加密的AES进行加密++

  •  0
  • user6492553  · 技术社区  · 7 年前

    我有一个使用SHA256散列的字符串用作密钥,但如何使用该密钥在CBC模式和crypto++下用AES加密字符串? 谢谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   user6492553 user6492553    7 年前

    我最终用下面的代码实现了预期的结果。

        QString qhash = "hash";
        std::string plain = "message";
        std::string ciphertext;
        std::string stdhash = qhash.toStdString();
    
        CryptoPP::HexDecoder decoder;
        decoder.Put((byte*)stdhash.data(),qhash.size());
        decoder.MessageEnd();
    
        CryptoPP::word64 size = decoder.MaxRetrievable();
        char *decodedKey = new char[size];
        decoder.Get((byte *)decodedKey, size);
    
        byte hash[CryptoPP::AES::MAX_KEYLENGTH], iv[ CryptoPP::AES::BLOCKSIZE ];
    
        CryptoPP::StringSource(reinterpret_cast<const char *>(decodedKey), true,new CryptoPP::ArraySink(hash, CryptoPP::AES::MAX_KEYLENGTH));
        memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);
        CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption Encryptor(hash,sizeof(hash),iv);
        CryptoPP::StringSource( plain, true, new CryptoPP::StreamTransformationFilter( Encryptor, new CryptoPP::HexEncoder(new CryptoPP::StringSink( ciphertext )) ) );
        return ciphertext;