【问题标题】:AES Decryption in Solidity ContractSolidity 合约中的 AES 解密
【发布时间】:2021-08-09 19:07:55
【问题描述】:

我正在尝试创建一个使用 AES 密钥解密消息的可靠合约。要解密的数据在合约中保存为变量(该数据已经加密)。用户应该能够将 AES 密钥传递给解密函数,该函数应该解密并返回消息。

我不介意将密钥暴露在网络上。有什么办法可以实现吗?

【问题讨论】:

    标签: encryption aes ethereum solidity


    【解决方案1】:

    Solidity 当前 (v0.8) 不支持任何 AES 算法。


    如果您的目标是向提供正确密钥的用户执行操作(例如转移资金),您可以让他们计算某个秘密 (例如密钥)链下,然后提交原始密钥进行验证(针对存储在合约中的哈希)。

    pragma solidity ^0.8;
    
    contract MyContract {
        // keccak256 hash of the string "foo"
        bytes32 hash = 0x41b1a0649752af1b28b3dc29a1556eee781e4a4c3a1f7f53f90fa834de098c4d;
        
        function guessThePassword(string memory _password) external view returns (bool) {
            return keccak256(abi.encodePacked(_password)) == hash;
        }
    }
    

    请注意,这种方法(以及您在问题中的原始方法)容易受到抢先交易的影响。防止抢先交易的方法之一是使用双重哈希。您可以在this contract 中看到一个代码示例,用于“首先提交正确的密码可以提款”的竞赛类型。

    【讨论】:

    • 感谢您的回复。我可以调整应用程序以处理服务器端的解密。
    猜你喜欢
    • 2016-09-22
    • 2022-08-11
    • 2021-02-11
    • 2018-08-13
    • 1970-01-01
    • 2022-08-05
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多