如何像 OpenSSL 一样在 C# 中打印字节作为字符表示?

问题描述 投票:0回答:1

我正在尝试重新创建一些 OpenSSL 算法,但在打印 DES 加密的加密结果时我遇到了困难。

我知道我的加密正在工作,因为以十六进制或 base64 打印结果会得到与 OpenSSL 相同的结果。我的问题是,当我尝试以与 OpenSSL 相同的方式打印它时,只需将字节值打印为字符即可。

例如,运行以下命令:

echo "foo bar" | openssl des-cbc -K "0123456789ABCDEF" -iv "0123456789ABCDEF" -provider legacy -provider default | xxd

会给我这个结果:

00000000: bcbf 295f 49a1 b714 6469 2be2 99c9 0dcb  ..)_I...di+.....

但是当我的程序运行相同的命令时:

echo "foo bar" | ./my_openssl des-cbc -k "0123456789ABCDEF" -v "0123456789ABCDEF" | xxd

我会得到这个:

00000000: efbf bdef bfbd 295f 49ef bfbd efbf bd14  ......)_I.......
00000010: 6469 2bef bfbd efbf bd0d efbf bd         di+..........

正如我所说,我的加密工作正常,因为当使用 -a 标志(将结果打印为 base64 字符串)运行时,我得到相同的输出。

目前,我正在通过执行以下操作将结果打印到控制台:

// result is a byte[] that stores my DES-CBC encryption result as bytes
Console.Write(Encoding.UTF8.GetString(result));

OpenSSL 如何打印其结果?它的编码与控制台使用的编码不同吗?它在做一些不同的事情吗?用C#可以吗?

感谢您的帮助!

c# encryption openssl des
1个回答
0
投票

尝试使用

BitConverter

Console.Write(BitConverter.ToString(result));
© www.soinside.com 2019 - 2024. All rights reserved.