从 Javascript (nodeJS) 到 dart (Flutter) 以及从 dart 到 Javascript 的加密和解密

pan*_*iko 4 javascript encryption rsa dart flutter

正如标题所示,我想知道是否有一种方法可以加密和解密,例如使用RSA算法、从javascript到dart的数据以及相反的方法。我看到有一个库“js”,它允许您在 dart 中使用 javascript 代码,但我无法使用它来满足我的需要。我还尝试使用为两种语言提供的各种库 \xe2\x80\x8b\xe2\x80\x8b 来执行这些加密操作,但它们在两种语言之间不兼容。

\n

Kar*_*aya 5

注册机 (NodeJS)

文档:https ://nodejs.org/api/crypto.html#crypto_crypto_generatekeypair_type_options_callback

const { generateKeyPair } = require('crypto');

generateKeyPair('rsa', {
    modulusLength: 4096,    // key size in bits
    publicKeyEncoding: {
        type: 'spki',
        format: 'pem',
    },
    privateKeyEncoding: {   
        type: 'pkcs8',      
        format: 'pem',
    },
}, (err, publicKey, privateKey) => {
    // Handle errors and use the generated key pair.
});
Run Code Online (Sandbox Code Playgroud)

通过JSEncrypt库进行NodeJS加密

节点js加密:https://www.npmjs.com/package/node-jsencrypt
JSEncrypt: https: //travistidwell.com/jsencrypt/#

const JSEncrypt = require('node-jsencrypt');  

function encrypt(text, key) {
    const crypt = new JSEncrypt();
    crypt.setKey(key);
    return crypt.encrypt(text);
}

function decrypt(encrypted, privateKey) {
    const crypt = new JSEncrypt();
    crypt.setPrivateKey(privateKey);
    return crypt.decrypt(encrypted);
}
Run Code Online (Sandbox Code Playgroud)

通过crypton进行Dart加密

GitHub: https: //github.com/konstantinullrich/crypton

import 'package:crypton/crypton.dart';

import 'encryption.dart';

class AsymmetricCrypt implements Encryption {
  final String _key;
  RSAPublicKey _publicKey;
  RSAPrivateKey _privateKey;

  AsymmetricCrypt._(this._key);

  @override
  String encrypt(String plain) {
    _publicKey ??= RSAPublicKey.fromPEM(_key);
    return _publicKey.encrypt(plain);
  }

  @override
  String decrypt(String data) {
    _privateKey ??= RSAPrivateKey.fromPEM(_key);
    return _privateKey.decrypt(data);
  }
}
Run Code Online (Sandbox Code Playgroud)