如何在flutter加密包中使用15个长度的字符密钥

How to use 15 length character key in flutter encrypt package

我打算在 flutter 应用程序中使用 this 包进行加密。 它不接受长度小于 16 个字符的密钥。但是我想使用长度为 15 个字符的键。因为在后台,加密和解密都是用同一个密钥。所以不能改变这个键。我需要做的是,使用给定的 15 个长度字符的密钥加密纯文本,并通过 API.

将其发送到后端

在Java后端,下面的代码用于加密文件。

public SecretKeySpec generateKey(String myKey){
    SecretKeySpec secretKey = null;
        byte[] key;       
        try {
            key = myKey.getBytes("UTF-8");
            key = MessageDigest.getInstance("SHA-1").digest(key);
            key = Arrays.copyOf(key, 16); 
            secretKey = new SecretKeySpec(key, "AES");
        }catch (NoSuchAlgorithmException e) {
            log.error("Error occured while generating key",e);
        } catch (UnsupportedEncodingException e) {
            log.error("Error occured while generating key",e);
        }
        return secretKey;
    }

在我的flutter应用中,我是这样使用上面的加密包的。

final key = enc.Key.fromUtf8('fifteenCharactersKey');
final iv = enc.IV.fromSecureRandom(16);
final encrypter = enc.Encrypter(
      enc.AES(key), //, mode: enc.AESMode.cbc, padding: 'PKCS7'
    );
final encrypted = encrypter.encrypt(plainText, iv: iv);

**enc is imported package {import 'package:encrypt/encrypt.dart' as enc}

请给我一个用 15 个字符的字符串生成密钥的想法。

终于,我找到了解决办法。 如上面 java 代码所述,我使用给定的私钥字符串得到了一个长度为 16 的字节数组。 数组如下,

[-107, -23, -101, 71, 19, -45, -126, -59, -40, 38, -45, -85, -92, 17, -72, -81]

在 flutter 代码中,我将提取的字节数组转换为 Uint8List。

Uint8List x = Uint8List.fromList([-107, -23, -101, 71, 19, -45, -126, -59, -40, 38, -45, -85, -92, 17, -72, -81]);

final key = enc.Key(x);
final iv = enc.IV.fromSecureRandom(16);
final encrypter = enc.Encrypter(
  enc.AES(key,
    mode: enc.AESMode.cbc
  ),
);

final encrypted = encrypter.encrypt(plainText, iv: iv);