【发布时间】:2017-12-22 17:45:33
【问题描述】:
我目前正在尝试以稳固的方式偏移字节以实现简单的凯撒密码解密。但是,我无法弄清楚如何做到这一点。这是我当前的代码,它在 Remix 中给出了一些编译器错误:
function decrypt(bytes32 data, int key) public returns (bool) {
bytes32 decryptedData = data; // `data` here is the encrypted data
// decryption
for (int i = 0; i < decryptedData.length; i++) {
decryptedData[i] = (decryptedData[i] - key) % 256;
}
// returns if sha256(decryptedData) matches some value
}
但是,这给了我以下错误:
TypeError: Expression has to be an lvalue.
decryptedData[i] = (decryptedData[i] - key) % 256;
^--------------^
TypeError: Operator - not compatible with types bytes1 and int256
decryptedData[i] = (decryptedData[i] - key) % 256;
^--------------------^
TypeError: Operator % not compatible with types bytes1 and int_const 256
decryptedData[i] = (decryptedData[i] - key) % 256;
^----------------------------^
谢谢!
【问题讨论】:
-
“key”在哪里定义?
-
对,key在函数参数中定义为int!我会更新帖子——对此感到抱歉。
-
所以显示的算法不是凯撒密码的算法,因为您没有按照问题中的建议按索引计数移动字节。
标签: ethereum solidity smartcontracts ether