Rust AES-256-CBC解密

时间:2019-05-30 02:20:22

标签: encryption rust aes rust-crypto

我正在尝试使用this example中的rust-crypto将Node.js函数转换为将存储在数据库BLOB中的AES-256-CBC值解密为纯文本。

当我运行一个对字符串进行加密然后再使用密钥和已知IV对其进行解密的测试时,所有这些都能按预期工作,因此我知道encrypt()decrypt()函数可以正常工作,但是在运行时以前加密的数据出现各种错误,而且没有纯文本。

我认为问题可能与提取IV有关,如果我使用&raw_encrypted[0..16]会出现Option错误,如果我使用&raw_encrypted[1..16](我最初是无意中这样做的)尝试转换为UTF8时出现Result错误。...但是我还是Rust的新手,可能完全不合时宜。

错误

  

在一个Option::unwrap()值上称为None

     

在一个Result::unwrap()值上称为Err:FromUtf8Error {字节:[...字符...]}

铁锈

let (encrypted) = mysql::from_row(row);
let raw_encrypted: Vec<u8> = encrypted;
let iv = &raw_encrypted[0..16];
let content = &raw_encrypted[16..raw_encrypted.len()];
let decipher = &decrypt(content, &key, &iv).ok().unwrap();
let json = String::from_utf8(decipher.to_vec()).unwrap();

我要从中转换的有效Javascript如下所示:

节点

function decrypt(encrypted, key) {
  const iv = encrypted.slice(0, self._iv_length);
  const content = encrypted.slice(self._iv_length, encrypted.length);
  const decipher = crypto.createDecipheriv(self._algorithm, key, iv);
  const json = decipher.update(content, undefined, 'utf8') + decipher.final('utf8');
  return json;
}

0 个答案:

没有答案