我正在尝试重新创建一些 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#可以吗?
感谢您的帮助!
尝试使用
BitConverter
类
Console.Write(BitConverter.ToString(result));