簡體   English   中英

有人在 Flutter 上使用過 Rijndael 加密嗎? 如何使用 Rijndael 進行加密?

[英]Has anyone worked with Rijndael encryption on Flutter? How to encrypt with Rijndael?

我正在使用加密 Flutter 包。 我寫了下面的代碼來加密數據。 但我找不到預期的結果。

  String encrypterAESdata({String? data}){ 
    final key = Key.fromUtf8(aesKey);
    final iv = IV.fromUtf8(aesKey);
    final encrypter = Encrypter(AES(key, mode: AESMode.cbc, padding: "PKCS7" ));
    final encrypted = encrypter.encrypt(data!, iv: iv);
    return encrypted.base64;
  }

測試數據:

{
  "remittanceNoPrefix": "IT",
  "adjustedDCAmount": 0,
  "beneAccNo": "01912163589",
  "benePhone": "01912163589",
  "beneAccTypeID": 199,
  "beneAmount": "4900",
  "beneBankName": "BKASH (MOBILE ACCOUNT)",
  "beneBankBranchID": 31637,
  "beneBankID": 1135,
  "beneBranchName": "BKASH (ANY AGENT POINT)",
  "beneBrnAddress": "ANYWHERE",
  "beneCountryID": 23,
  "beneCurrencyID": 15,
  "beneDocID": null,
  "beneDocNo": "",
  "beneficiaryID": 497656,
  "beneficiarySurname": "TEST",
  "beneficiaryName": "TEST",
  "relationID": null,
  "benePayeeModeID": 11,
  "subCompanyBranchID": 151886,
  "companyID": 76,
  "subCompanyID": 367,
  "debitCardID": null,
  "discountedComm": 0,
  "encashedPoint": 0,
  "encashedPointAmount": 0,
  "equiAmount": 50,
  "ofrdAmount": 50,
  "equiCommission": 3,
  "ofrdCommission": 3,
  "taxAmount": 0,
  "cardCharge": 0,
  "instrumentDetail": "",
  "instrumentTypeID": "120",
  "maturityDate": "2019-02-14T00:00:00.000Z",
  "issueDate": "2019-02-14T00:00:00.000Z",
  "othrRcvdAmount": 0,
  "othrRcvdCommission": 0,
  "pDRate": 98,
  "purposeDetail": "FAMILY HELP",
  "purposeID": 2,
  "aMLRemBhvClsID": null,
  "aMLRemBhvClsValue": 0,
  "aMLOpVoteClsID": null,
  "aMLOpVoteClsValue": 0,
  "aMLCoopClsID": null,
  "aMLCoopClsValue": 0,
  "aMLOpTypeClsID": null,
  "aMLOpTypeClsValue": 0,
  "fldPsfx": "",
  "cdType": "BNKXFR",
  "cdNo": "",
  "cdExp": "",
  "cdSecCode": ""
}

預期結果:

/qDmHF87PF/E6Bmwiot9roUrXwEvykmHzCLMbKq2YnVUuHDGqXqMWlJ8ZhCzMBcqppkpvjY6NkN8bUUp0fYZz1Pl6I5E/qtIaxbvrMOU+wRDpLvV1Ymd+o+J1fe0PLAmC5SUXsj1MyRCPG0LJ1cRjHR7F4HnWJZoGOCmeh3nZrzGSkdVQ3Xya8c8eK0RiAkcgUABpwptY77yknR1WNEV6HoOnOxdPt6vo/D0oba17jp5coonFCcVUsmZ3PacRmCzVuhbvqaFJgCoykBZOkzsSUgl792F1QP9995q/S/hmFJZv2JHyNKeOGLJ55uMSVHYTPOvqgAn7VZ2CkiTBQSaDJpWzLF/3HpQR9jjgY3n5cOGqJyPbWiLz0N4jWeOJ6TUnyBd8K5PhtOY8C+uh5GkeyAWrieEFbX1Q5pytaUKcqDBTOWjF3945ImVSoviZYHDaPgJ8f/1V3FuAdH3VM+zpzlBAmVwtcjfZZzfzdDSOUgYeU98P+JjWfqX8bQu5vXBSCnkMqEENyM85z9ISoi+oYKnsYNt6sPKOf2lVIxj+9vA9G1+fCfNTH1a7Tg2yszSHA3yTNy1QLTqQY9fCS0A/vIgJPjHYJPjjLNK4CA0L1mZje8Rkh9eha8BD61/6YPAJFAfiU6eNK8uC5gToMSdOTt2auj2i3yuPx8sLyTBe8MOI3TOCoE/xC2yqCUxuUqH1ppn2TKlNjULy2ChiJG5o3cTC6b7trAaNzn+B8220TkaM1+k5RDvELd6+GcxdteO43oECs2eoXYF28z+V/kGHAhQeBBMKEF5sAaD3Qnq+IX4uHOjc6ngu41IbKnvrMaDL+o1qjfrLILQAPgYYHSzzp/C7Ov1Yzym0bR8dp7g+ATFj+1sgNOQWyzVr7v74stncu0aREBPJFTn1SkoajFJ2XD40+65IHw6ZKxfeXT2ArKueZrXPFYI/j5FW1jVfyM66FW6prmJ33PfadQ1OLMRS84FKhv3xfXP20hca/mMDXWzVOfhMDhPQRx0txL6Qh6AqS984UgM6CTcWIGL7UC7UMDtEYrcsLOw0y7LR0vD0acH+d4NESC7AzyDaN4//otzaYyOeNvYCraDWx0DpPyJCQfQSQKctzELHWgcb8hHgMup42ewu4+cMml42eTwVjrbKAYcSTYeimb0aVa9LlObOoUBFBrudzhhyXueYd1+RK83k8BuCyxo9jsk7oDlsngm4j8HdOvp2TJm4gFs1wTDR4lQmuqVNMdorJT6iO7f/tEuOMTb6lXueM7XWDlQ9vbUYDlG8py9K3Tfd6cPny2L7uzdCk2OnnmEpYmVM3nzhgY1wYz/TwS3sWAYriRDJ1WhXKoCWC7iXn+rKq1QwctxatFiz14zYtU41ucXFM0uiU76jPYQ8q3UsGHMvoL7pbAii4qW05QEcDuGjI/kJgtTf8KWZz+tk7ii3nnh+nrh//1hiC8sC1GJ7/PIdvPj4yXWv0wG8XONfl43MIRTD1n43ePkNQaYyeGFmcZc+BJjPTZ6Z7KZjACbaeS8YZlAE8EAOVGNzq4oZFpFt/+VJcMIa17LtCrjTqcDuDFggjO633Z3ISLnAZJeYoaXtFWaehdZVCimTh0xCnON63jlmyrZoL38cCqFfBiEcJ4O04Pfqob6FEhgTEk4vhQLV7n/O4LhsR9yyfnipY2IrZHVOIGYDJfnw3D4NrpKjBRxq2q/ihTLYzQCpmyXaFVNmgIsv37fdgk2TYZ6leyVs+jDdUwogluqzbTEGOOqK4ZqvLgntEYEFjGEP4Ztjwu48BuLvsT2vH/zuKMW5L0WtZYn6Ytq2sFDJ2aoFSWvUwnz4w5lrrD1dmOOJJGpnn3aNAWcwx5DZk7tCFOp0D6zGtajLM7pMA==

鑰匙:

**********

四:

*********

我從來沒有發現圍繞pointcastle的“包裝”包很有用。 他們只是以添加“簡單性”的名義添加了混淆層。 直接使用底層包通常更容易。

import 'dart:convert';
import 'dart:typed_data';

import 'package:pointycastle/export.dart';

void main() {
  final k = 'Nec_uK_2@!6_CebD';
  final key = utf8.encode(k) as Uint8List;
  final iv = key;

  print(key);

  final cipher = PaddedBlockCipherImpl(
    PKCS7Padding(),
    CBCBlockCipher(AESEngine()),
  )..init(
      true,
      PaddedBlockCipherParameters(
        ParametersWithIV(KeyParameter(key), iv),
        null,
      ),
    );

  final data = utf8.encode(pt) as Uint8List;
  final ct = cipher.process(data);

  print(data.length);
  print(ct.length);
  print(base64.encode(ct));
}

final pt = '''{
  "remittanceNoPrefix": "IT",
  "adjustedDCAmount": 0,
  ...
  "cdExp": "",
  "cdSecCode": ""
}''';

十分簡單

import 'package:cryptography/cryptography.dart';

String s = "i want to encrypt this init";

String key = 'AA­èìýUn}a…ópŒ¹%J'yL4ßK,£½';

List<int> listint= utf8.encode(s);

Uint8List listUint= Uint8List.fromList(key.codeUnits);


AesGcm algorithm = AesGcm.with256bits();

SecretKey secretKey = await algorithm.newSecretKeyFromBytes(listUint);


    SecretBox secretBox = await algorithm.encrypt(
      listint,
      secretKey: secretKey,
    );

    print('Nonce: ${secretBox.nonce}');
    print('Ciphertext: ${secretBox.cipherText}');
    print('MAC: ${secretBox.mac.bytes}');


    Uint8List listEncryptedUint = secretBox.concatenation();
    print('this is the encrypted payload init: '+listEncryptedUint .toString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM