【问题标题】:Dart Convert from base64 to HEXDart 从 base64 转换为 HEX
【发布时间】:2021-04-28 10:08:54
【问题描述】:

我不知道如何转换这个base64字符串:

'g7DmoaMppUjtbxe5Qm9NlMr5pRitu7TayInEUMeOW+FDxYW3GAh+G0YsfmoAyfqTw72fWphF9ncT
P7QnsXAM8Of6o92AuVzryBt5Usm4sJ32GLaH+9SNx3J5DK1NjKrWSbP0F/EyrGjoveBc2Ut7XntM
p8NcGn39eD+PHQKfWnc='

到这个十六进制:

'83b0e6a1a329a548ed6f17b9426f4d94caf9a518adbbb4dac889c450c78e5be143c585b718087e1b462c7e6a00c9fa93c3bd9f5a9845f677133fb427b1700cf0e7faa3dd80b95cebc81b7952c9b8b09df618b687fbd48dc772790cad4d8caad649b3f417f132ac68e8bde05cd94b7b5e7b4ca7c35c1a7dfd783f8f1d029f5a77'

我用这个链接转换了https://base64.guru/converter/decode/hex

【问题讨论】:

    标签: dart base64 hex


    【解决方案1】:

    这样的事情应该可以解决问题:

    import 'dart:convert';
    
    void main() {
      final hex = base64Decode(
              'g7DmoaMppUjtbxe5Qm9NlMr5pRitu7TayInEUMeOW+FDxYW3GAh+G0YsfmoAyfqTw72fWphF9ncT'
              'P7QnsXAM8Of6o92AuVzryBt5Usm4sJ32GLaH+9SNx3J5DK1NjKrWSbP0F/EyrGjoveBc2Ut7XntM'
              'p8NcGn39eD+PHQKfWnc=')
          .map((e) => e.toRadixString(16).padLeft(2, '0'))
          .join();
    
      print(hex);
      // 83b0e6a1a329a548ed6f17b9426f4d94caf9a518adbbb4dac889c450c78e5be143c585b718087e1b462c7e6a00c9fa93c3bd9f5a9845f677133fb427b1700cf0e7faa3dd80b95cebc81b7952c9b8b09df618b687fbd48dc772790cad4d8caad649b3f417f132ac68e8bde05cd94b7b5e7b4ca7c35c1a7dfd783f8f1d029f5a77
    }
    

    处理输入换行符的更新解决方案:

    import 'dart:convert';
    
    void main() {
      print(base64ToHex(
          'g7DmoaMppUjtbxe5Qm9NlMr5pRitu7TayInEUMeOW+FDxYW3GAh+G0YsfmoAyfqTw72fWphF9ncT\n'
          'P7QnsXAM8Of6o92AuVzryBt5Usm4sJ32GLaH+9SNx3J5DK1NjKrWSbP0F/EyrGjoveBc2Ut7XntM\n'
          'p8NcGn39eD+PHQKfWnc='));
      
      // 83b0e6a1a329a548ed6f17b9426f4d94caf9a518adbbb4dac889c450c78e5be143c585b718087e1b462c7e6a00c9fa93c3bd9f5a9845f677133fb427b1700cf0e7faa3dd80b95cebc81b7952c9b8b09df618b687fbd48dc772790cad4d8caad649b3f417f132ac68e8bde05cd94b7b5e7b4ca7c35c1a7dfd783f8f1d029f5a77
    }
    
    String base64ToHex(String source) =>
        base64Decode(LineSplitter.split(source).join())
            .map((e) => e.toRadixString(16).padLeft(2, '0'))
            .join();
    

    【讨论】:

    • Tks 但我收到此错误:FormatException: Invalid character (at character 77) NgtXjEwaBH+czA4ppWNcEIEBQYh8M8FMzzyQAeghWD/gWh9h+bZIbo/wL92y55DBpJejh/3LbSaf ^
    • @Marcus 你有什么意见?如果我尝试NgtXjEwaBH+czA4ppWNcEIEBQYh8M8FMzzyQAeghWD/gWh9h+bZIbo/wL92y55DBpJejh/3LbSaf,它会起作用。
    【解决方案2】:

    我想我知道为什么。我使用 simple_rsa Flutter 包将我的字符串转换为 base64 但带有 3 个“\n”。

    @julemand101 你的代码是正确的。

    我只是在您的代码之前添加了一个 replaceAll "\n" -> ""。

    String encryptedText='g7DmoaMppUjtbxe5Qm9NlMr5pRitu7TayInEUMeOW+FDxYW3GAh+G0YsfmoAyfqTw72fWphF9ncTP7QnsXAM8Of6o92AuVzryBt5Usm4sJ32GLaH+9SNx3J5DK1NjKrWSbP0F/yrGjoveBc2Ut7XntMp8NcGn39eD+PHQKfWnc='
    
     encryptedText=base64.normalize(encryptedText.replaceAll("\n", ""));//replace all
     final hex = base64Decode(encryptedText).map((e) => e.toRadixString(16).padLeft(2, '0')).join();
    

    【讨论】:

    • 我已经用一个解决方案更新了我的答案,它以比替换 \n 更好的方式处理换行符,因为这不是您应该处理的唯一换行符。该解决方案使用 LineSplitter 处理所有不同类型的换行符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2011-06-02
    • 2021-08-22
    • 2018-08-05
    • 2014-06-05
    • 1970-01-01
    相关资源
    最近更新 更多