我在這里旋轉我的輪子,試圖找到這個 NodeJS 代碼的 C# 等價物。這是從一個更大的身份驗證函式中提取的,該函式已遷移到 C# 中。我不確定 Buffer.from 產生什么資料型別并嘗試使用 Encoding.UTF8.GetBytes 復制輸出,但是當我在控制臺中寫入位元組時,我最終得到了不同的輸出。
我只需要來自 out2 的相同最終輸出就可以在等效的 c# 函式中生成,以便它最終作業。任何幫助,將不勝感激!!
const bitwise = require('bitwise');
testkey = "gEracj9I248GF3yS";
timestamp = "1649302201249";
testid = "8621349";
var testkeyBuffer = new Buffer.from(testkey);
// OUTPUT : 67 45 72 61 63 6a 39 49 32 34 38 47 46 33 79 53
var testkeyArrByte = Uint8Array.from(testkeyBuffer)
// OUTPUT : 103 69 114 97 99 106 57 73 50 52 56 71 70 51 121 83
var timestampBuffer = new Buffer.from(timestamp);
// OUTPUT : 31 36 34 39 33 30 32 32 30 31 32 34 39
var testidBuffer = new Buffer.from(testid);
out1 = bitwise.buffer.or(testkeyBuffer,timestampBuffer);
// OUTPUT : wwvysz;{25:w?3yS
out2 = bitwise.buffer.xor(out1,testidBuffer);
// OUTPUT : OADH@N?{25:w?3yS
uj5u.com熱心網友回復:
看起來它只是在兩個串列上逐個元素地應用位運算子。如果一個串列更長,則另一個串列中的其余元素不會發生任何事情。
這可能是一個輔助方法,例如
public IEnumerable<byte> OpOrNop(List<byte> a, List<byte> b, Func<byte, byte, byte> func)
{
var longer = a;
if (b.Count > a.Count)
{
longer = b;
}
for (int i=0; i<a.Count; i )
{
if (i < b.Count)
{
yield return func(a[i], b[i]);
}
else
{
yield return a[i];
}
}
}
所以
string testkey = "gEracj9I248GF3yS";
string timestamp = "1649302201249";
string testid = "8621349";
var testkeyBuffer = System.Text.Encoding.ASCII.GetBytes(testkey);
var timestampBuffer = System.Text.Encoding.ASCII.GetBytes(timestamp);
var testidBuffer = System.Text.Encoding.ASCII.GetBytes(testid);
var out1 = OpOrNop(testkeyBuffer.ToList(), timestampBuffer.ToList(), (a, b) => (byte)(a | b));
var out2 = OpOrNop(out1.ToList(), testidBuffer.ToList(), (a, b) => (byte)(a ^ b));
System.Text.Encoding.ASCII.GetString(out2.ToArray())
System.Text.Encoding.ASCII.GetString(out1.ToArray())
控制臺輸出
"wwvysz;{25:w\u007f3yS"
"OADH@N\u0002{25:w\u007f3yS"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/513887.html
上一篇:DeepClassHierarchies解決版本好嗎?
下一篇:重繪頁面后聯系人才被洗掉
