[英]How do you convert a operation and byte array to a hexadecimal string?
I try to reverse that code.我尝试反转该代码。
var val = FormatFingerOp(BitConverter.ToString(Convert.FromBase64String("EcE4Zodu3wRTBXntCdUvifj+/GggA3DnG6zEKRZGpcY=")));
FormatFingerOp do that thing: FormatFingerOp 做那件事:
var fp = "";
string[] keys = val.Split('-');
for (int i = 1; i <= keys.Length; i++)
{
fp += keys[i - 1];
if (i % 2 == 0)
fp += " ";
}
I try that but it doestn work.我试过了,但它不起作用。 I try to reverse this steps like that:
我尝试像这样扭转这些步骤:
string xsonuc = "";
for (int i = 1; i <= fp.Length; i++)
{
xsonuc += fp[i - 1];
if (i % 2 == 0)
xsonuc += "-";
}
int NumberChars = val.Length;
byte[] ysonuc = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
ysonuc[i / 2] = Convert.ToByte(val.Substring(i, 2), 16);
I would argue that in general case this is not reversible, FormatFingerOp
will concatenate pairs of keys into one entry, ie "one-three"
will become ".nethree"
so if you don't have any prior knowledge of key structure (like fixed length or something) - you can't reverse it.我认为在一般情况下这是不可逆的,
FormatFingerOp
会将成对的键连接成一个条目,即"one-three"
将变成".nethree"
,所以如果你没有任何关于键结构的先验知识(比如固定的长度或其他东西) - 你不能扭转它。
As for your code - note that FormatFingerOp
iterates array of strings, while it seems that your are trying to iterate the string itself (for starters you need to "reverse" new separator " "
- so fp.Split(" ")
).至于您的代码 - 请注意
FormatFingerOp
迭代字符串数组,而您似乎正在尝试迭代字符串本身(对于初学者,您需要“反转”新分隔符" "
- 所以fp.Split(" ")
)。
UPD更新程序
Try the following:尝试以下操作:
var original = "EcE4Zodu3wRTBXntCdUvifj+/GggA3DnG6zEKRZGpcY=";
var val = BitConverter.ToString(Convert.FromBase64String(original));
var fp = "";
string[] keys = val.Split('-');
for (int i = 1; i <= keys.Length; i++)
{
fp += keys[i - 1];
if (i % 2 == 0)
fp += " ";
}
// Reverse
var sb = new StringBuilder();
foreach(var pair in fp.Split(" ", StringSplitOptions.RemoveEmptyEntries))
{
sb.Append(new []{pair[0], pair[1]});
sb.Append(new []{pair[2], pair[3]});
}
var toEncode = sb.ToString();
var base64String = Convert.ToBase64String(Convert.FromHexString(toEncode));
Console.WriteLine(base64String == original);
UPD2 UPD2
Implementation which should be compatible with older .NET verions:应与旧 .NET 版本兼容的实现:
// Reverse
var split = fp.Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries);
var bytes = new byte[split.Length * 2];
for (var index = 0; index < split.Length; index++)
{
var pair = split[index];
bytes[index * 2] = Convert.ToByte(pair.Substring(0, 2), 16);
bytes[index * 2 + 1] = Convert.ToByte(pair.Substring(2, 2), 16);
}
var base64String = Convert.ToBase64String(bytes);
Console.WriteLine(base64String == original);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.