Dart 套接字不发送低于 31 的 utf-8 字符

Dart socket doesn't send utf-8 chars below 31

所以,我和 2 个朋友目前正在做一个项目。其中一个是服务器编程,另一个是网站,我是一个应用程序。首先,我们的程序应该在没有加密的情况下相互通信。这也很有效。但现在我们想使用 AES 256 CBC 加密消息。那就是问题开始的时候。起初,加密本身不能正常工作,但现在可以了。

但是,在发送加密邮件时,有些字符没有发送。显然,32 以下的字符,即根据 UTF8 table 仅具有值“control”的所有值。但是,我不知道如何解决这个问题。我们也测试了是不是服务器的问题,但是网站和一个快速编写的Java程序都没有这个问题。因此我们假设错误在我这边。

这是我用来加密的代码:

String encrypt(String  pKey, pIV, msg){


  final key = Key.fromUtf8(pKey);
  final iv = IV.fromUtf8(pIV);

  final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
  final encrypted = encrypter.encrypt(msg, iv: iv);
  String utf8Msg = "";
  for(int i = 0;i<encrypted.bytes.length;i++ ){
    utf8Msg += String.fromCharCode(encrypted.bytes[i]);
  }
  print("###AES encrypted text: ${utf8Msg}") ;
  return utf8Msg;

这是我用来发送消息的代码:

Future<void> run(String ip, int port, String request, key, iv) async {
  i = 0;
  String _request = request;
  Completer<String> _completer = new Completer<String>();
  print("Request: $_request");
  _errorData = "Server_Error";
  if (_request != null) {
    print("Request has data");
    socket = await Socket.connect(ip, port);
    socket.encoding = utf8;

    socket.listen((data) {
      //code for the received messages

    },
    onError: ((error, StackTrace trace) {
      _secureResponse = _errorData;
      print("(2) $_secureResponse");
      _completer.completeError(_secureResponse);
    }),
    onDone: () {
      print("finish");
      _completer.complete(_secureResponse);
      socket.destroy();
    },
    cancelOnError: false);
    print("Socket sends data");

    socket.write(encrypt(key, iv, msg))

  } else {
    _secureResponse = _errorData;
    print("(4) $_secureResponse");
  }

  return _completer.future;
}

您应该使用不是 UTF-8 字符串的数据类型,而是相当于缓冲区的 dart,我认为可能是 ByteBuffer?