如何在 dart 中解密加密值?

2 encryption sha256 hmac dart

我正在测试 Dart 的加密哈希函数。我找不到有关解密的任何信息?谁能告诉我如何解密加密值?

这是例子;

import 'dart:convert';
import 'package:crypto/crypto.dart'; 

void main() async { 
  var key = utf8.encode('p@ssw0rd'); 
  var bytes = utf8.encode("Dart and Aqueduct makes my life easier. Thank you."); 


  // TODO: ENCRYPTION 
  var hmacSha256 = new Hmac(sha256, key); // HMAC-SHA256 
  var digest = hmacSha256.convert(bytes); 
 
  print(“————ENCRYPTION—————“); 
  print("HMAC digest as bytes: ${digest.bytes}"); 
  print("HMAC digest as hex string: $digest"); 
  print('\r\n'); 


  // TODO: DECRYPTION 
     ???????????? 
  print(“————DECRYPTION—————“); 
  print(?????????); 

}
Run Code Online (Sandbox Code Playgroud)

Pet*_*tro 5

IMO 最简单的方法是使用encrypt

import 'package:encrypt/encrypt.dart';

final key = Key.fromUtf8('put32charactershereeeeeeeeeeeee!'); //32 chars
final iv = IV.fromUtf8('put16characters!'); //16 chars

//encrypt
String encryptMyData(String text) {
  final e = Encrypter(AES(key, mode: AESMode.cbc));
  final encrypted_data = e.encrypt(text, iv: iv);
  return encrypted_data.base64;
}

//dycrypt
String decryptMyData(String text) {
  final e = Encrypter(AES(key, mode: AESMode.cbc));
  final decrypted_data = e.decrypt(Encrypted.fromBase64(text), iv: iv);
  return decrypted_data;
}
Run Code Online (Sandbox Code Playgroud)


Sea*_*ton 2

HMAC 是消息认证码。它是一个摘要,用于验证消息未被篡改,类似于签名。它是使用单向哈希函数(在本例中为 SHA256)构建的。它不是加密,并且无法逆转,因此您所拥有的值无法解密。

您可以使用 HMAC 做的唯一事情是,在给定 HMAC 和相应的纯文本的情况下,验证纯文本的来源以及它未被篡改。

查看Dart 加密库的 GitHub 页面,看起来它只支持摘要算法。没有列出加密算法,因此如果您想要进行实际上可以解密的双向加密,则需要使用不同的库。Cipher库看起来在这方面很有前途。