我正在测试Dart的加密哈希函数。我找不到有关DECRYPTION的任何信息? 谁能告诉我如何解密加密的值?
这是例子;
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(?????????);
}
答案 0 :(得分:1)
过去曾建议使用PointyCastle(https://pub.dartlang.org/packages/pointycastle),但似乎尚未针对Dart 2进行更新。:(
答案 1 :(得分:0)
HMAC是消息身份验证代码。与签名类似,它是用于验证邮件是否被篡改的摘要。它是使用单向哈希函数(在本例中为SHA256)构造的。它不是加密,并且不能逆转,因此无法解密具有 的值。
使用HMAC唯一可以做的就是给定HMAC和相应的纯文本,以验证纯文本的来源以及它是否未被篡改。
看着GitHub page for the Dart crypto library,看起来 only 支持摘要算法。没有列出加密算法,因此,如果要进行实际上可以解密的双向加密,则需要使用其他库。 Cipher库在这方面看起来很有希望。
答案 2 :(得分:0)
实际上,搜索很多东西找不到比这更好的东西。 加密0.2.0 新增功能,并具有Dart 2支持。 https://pub.dartlang.org/packages/encrypt#-installing-tab-
我需要使My Flutter Mobile App和Aqueduct可以共享安全通信的工具。 Leo Cavalcante是个好人。昨天我们谈话时,他很快回答了。因此,这是对Dart的另一种爱。因为每个人都互相支持。
它支持: AES(块密码) Salsa20(密码流) RSA(非对称)(有效)
将此软件包用作库
依赖性: 加密:“ ^ 0.2.0”
$ pub get
使用Flutter:
$个flutter包得到
或者,您的编辑器可能支持pub get或flutter包get。查看您的编辑器文档以了解更多信息。
答案 3 :(得分:0)
如果任何人都在寻找一个更简单的解决方案而不必依赖该库,那么我已经编写了有关在dart中对字符串值进行加密和解密的自定义解决方案,该方法显然也可以在flutter中使用。该代码非常简单,因此我将不讨论其代码。加密中使用的策略是x或加密解密。
var encryptionKey ='your encryption key';
static String encrypt(String data) {
var charCount = data.length;
var encrypted = [];
var kp = 0;
var kl = encryptionKey.length - 1;
for (var i = 0; i < charCount; i++) {
var other = data[i].codeUnits[0] ^ encryptionKey[kp].codeUnits[0];
encrypted.insert(i, other);
kp = (kp < kl) ? (++kp) : (0);
}
return dataToString(encrypted);
}
static String decrypt(data) {
return encrypt(data);
}
static String dataToString(data) {
var s = "";
for (var i = 0; i < data.length; i++) {
s += String.fromCharCode(data[i]);
}
return s;
}
答案 4 :(得分:0)
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;
}