gpt4 book ai didi

php - 在 php 中加密并在 Dart 中解密(flutter)

转载 作者:IT王子 更新时间:2023-10-29 07:00:17 64 4
gpt4 key购买 nike

有没有人知道加密来 self 的 php api 的响应并使用 dart 在本地解密数据。我正在为我的移动应用程序使用 flutter。

谢谢!

最佳答案

这是在FlutterPHPC# 中使用AES-256-CBC 进行加密/解密的方法> 算法。

flutter :

包含包 https://pub.dev/packages/encrypt

import 'dart:convert';

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

class Encryption {
static final Encryption instance = Encryption._();

late IV _iv;
late Encrypter _encrypter;

Encryption._() {
const mykey = 'ThisIsASecuredKey';
const myiv = 'ThisIsASecuredBlock';
final keyUtf8 = utf8.encode(mykey);
final ivUtf8 = utf8.encode(myiv);
final key = sha256.convert(keyUtf8).toString().substring(0, 32);
final iv = sha256.convert(ivUtf8).toString().substring(0, 16);
_iv = IV.fromUtf8(iv);

_encrypter = Encrypter(AES(Key.fromUtf8(key), mode: AESMode.cbc));
}

String encrypt(String value) {
return _encrypter.encrypt(value, iv: _iv).base64;
}

String decrypt(String base64value) {
final encrypted = Encrypted.fromBase64(base64value);
return _encrypter.decrypt(encrypted, iv: _iv);
}
}

用法 (单例类):

var encrypted = Encryption.instance.encrypt('my value to be encrypted');
var decrypted = Encryption.instance.decrypt(encrypted);

PHP:

<?php

class Encryption
{
private string $encryptMethod = 'AES-256-CBC';
private string $key;
private string $iv;

public function __construct()
{
$mykey = 'ThisIsASecuredKey';
$myiv = 'ThisIsASecuredBlock';
$this->key = substr(hash('sha256', $mykey), 0, 32);
$this->iv = substr(hash('sha256', $myiv), 0, 16);
}

public function encrypt(string $value): string
{
return openssl_encrypt($value, $this->encryptMethod, $this->key, 0, $this->iv);
}

public function decrypt(string $base64Value): string
{
return openssl_decrypt($base64Value, $this->encryptMethod, $this->key, 0, $this->iv);
}
}

用法:

$encryption = new Encryption();
$encrypted = $encryption->encrypt('my value to be encrypted');
$decrypted = $encryption->decrypt(encrypted);

C#:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

public class Encryption
{
byte[] key;
byte[] iv;

private Encryption instance;
public Encryption Instance
{
get
{
if (instance == null)
instance = new Encryption();
return instance;
}
}

private Encryption()
{
var Key = "ThisIsASecuredKey";
var Iv = "ThisIsASecuredBlock";

using (var sha256 = SHA256.Create())
{
key = Encoding.UTF8.GetBytes(ToHex(sha256.ComputeHash(Encoding.UTF8.GetBytes(Key))).Substring(0, 32));
iv = Encoding.UTF8.GetBytes(ToHex(sha256.ComputeHash(Encoding.UTF8.GetBytes(Iv))).Substring(0, 16));
}
}

public string Encrypt(string input)
{
using (var aesManaged = new AesManaged())
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, aesManaged.CreateEncryptor(key, iv), CryptoStreamMode.Write))
{
var inputBytes = Encoding.UTF8.GetBytes(input);
cs.Write(inputBytes, 0, inputBytes.Length);
}

return Convert.ToBase64String(ms.ToArray());
}
}

public string Decrypt(string base64value)
{
using (var aesManaged = new AesManaged())
using (var decryptor = aesManaged.CreateDecryptor(key, iv))
using (var ms = new MemoryStream(Convert.FromBase64String(base64value)))
using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
using (var sr = new StreamReader(cs))
{
return sr.ReadToEnd();
}
}

private string ToHex(byte[] bytes, bool upperCase = false)
{
var result = new StringBuilder(bytes.Length * 2);
for (int i = 0; i < bytes.Length; i++)
result.Append(bytes[i].ToString(upperCase ? "X2" : "x2"));
return result.ToString();
}
}

用法 (单例类):

var encrypted = Encryption.Instance.Encrypt("my value to be encrypted");
var decrypted = Encryption.Instance.Decrypt(encrypted);

关于php - 在 php 中加密并在 Dart 中解密(flutter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52231243/

64 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com