gpt4 book ai didi

C#,将字符串编码/解码为一些带有校验和的简单代码

转载 作者:行者123 更新时间:2023-12-02 05:23:25 26 4
gpt4 key购买 nike

我需要在 C# 中实现简单的字符串编码和解码。

我不需要“高度 secret ”加密,所以只要获得校验和,简单的编码就可以了。

我需要在一个代码实例中进行简单的双向编码解码。只有一个程序同时进行编码和解码,因此任何“ key ”都可以进行硬编码。

编码结果应为字母数字(文本)。应避免二进制数据(非字母、非数字),因为字段将参​​与文本 CSV 表的文件。

我需要获得一个可以检查一致性的代码(因此它应该包括控制数字/校验和),这样我就可以判断该字段未被第三方更改并且可以有效解码。 (类似于信用卡号码中的控制数字)。

代码长度应与原始字符串的长度大致相似(不要长 5-10 倍)。

如果您指出 C# 中最好的库,我将不胜感激,在此先感谢您!

最佳答案

RC4 是一种简单的算法,可以很容易地实现加密/解密。它不如 AES 安全,但在您的情况下似乎不需要 AES 安全性。下面是来自 this site 的 .NET 中 RC4 的实现。

public static class RC4
{
public static string Encrypt(string key, string data)
{
Encoding unicode = Encoding.Unicode;

return Convert.ToBase64String(Encrypt(unicode.GetBytes(key), unicode.GetBytes(data)));
}

public static string Decrypt(string key, string data)
{
Encoding unicode = Encoding.Unicode;

return unicode.GetString(Encrypt(unicode.GetBytes(key), Convert.FromBase64String(data)));
}

public static byte[] Encrypt(byte[] key, byte[] data)
{
return EncryptOutput(key, data).ToArray();
}

public static byte[] Decrypt(byte[] key, byte[] data)
{
return EncryptOutput(key, data).ToArray();
}

private static byte[] EncryptInitalize(byte[] key)
{
byte[] s = Enumerable.Range(0, 256)
.Select(i => (byte)i)
.ToArray();

for (int i = 0, j = 0; i < 256; i++)
{
j = (j + key[i % key.Length] + s[i]) & 255;

Swap(s, i, j);
}

return s;
}

private static IEnumerable<byte> EncryptOutput(byte[] key, IEnumerable<byte> data)
{
byte[] s = EncryptInitalize(key);

int i = 0;
int j = 0;

return data.Select((b) =>
{
i = (i + 1) & 255;
j = (j + s[i]) & 255;

Swap(s, i, j);

return (byte)(b ^ s[(s[i] + s[j]) & 255]);
});
}

private static void Swap(byte[] s, int i, int j)
{
byte c = s[i];

s[i] = s[j];
s[j] = c;
}
}

关于C#,将字符串编码/解码为一些带有校验和的简单代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13490261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com