C# 整数的短加密

C# 整数的短加密,c#,.net,encryption,public-key-encryption,C#,.net,Encryption,Public Key Encryption,我给了一个加密输入整数值的任务,这个整数最大长度为4,但是,我需要加密成字母数字字符串。除此之外,我从相同的值生成的结果,例如10,值必须不相同。最困难的部分是,加密字符串的最大长度只能为15,因为我们必须将其放入查询字符串中。这是一项艰巨的任务,我试图问谷歌,但我没有找到任何解决方案可以帮助我解决这个问题。所有长度都太长,不符合我需要的要求。有加密专业人士能帮我吗 public static string GetUniquePasswordSalt(string password) {

我给了一个加密输入整数值的任务,这个整数最大长度为4,但是,我需要加密成字母数字字符串。除此之外,我从相同的值生成的结果,例如10,值必须不相同。最困难的部分是,加密字符串的最大长度只能为15,因为我们必须将其放入查询字符串中。这是一项艰巨的任务,我试图问谷歌,但我没有找到任何解决方案可以帮助我解决这个问题。所有长度都太长,不符合我需要的要求。有加密专业人士能帮我吗

 public static string GetUniquePasswordSalt(string password)
{
    string uniqueSaltValue = "";
    Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(password, 16);
    uniqueSaltValue = Convert.ToBase64String(rfc2898.Salt);
    return uniqueSaltValue;
}
对于01,输出将为HB6yY+f5fyOaFFyrKEcPYw==

请尝试Rfc2898DeriveBytes


我假设您需要一个函数来输入一个四位数:[0000..9999]并生成一个15个字符的字母数字输出

您没有明确说明此函数是否是可逆的。如果不需要可逆性,那么单向散列函数将执行您想要的操作。15个十六进制字符为60位或15个Base32字符为75位。使用较大的哈希函数,截断并转换为十六进制或Base32。Base32提供比十六进制更广泛的输出字符范围


对于可逆性,您将需要一个,其中输出大小限制为60或75个有效位。对于60位,使用DES作为基本密码,因为它具有64位的块大小。75位更尴尬。128位的AES块太大,因此您可能需要编写一个简单的76位Feistel密码。这将给你很好的隐蔽性,但只有中等的安全性。您没有说明此功能需要有多安全

假设:整数最大长度为6表示6个数字字符000000-999999

使用具有8字节块大小的算法进行加密,然后进行Base64编码,这将产生12个字符的输出

将2个随机字节附加到6个字符的数据中,形成8个字节,这将导致对相同值的加密产生多达2^16或65536个不同的结果。在ECB模式下加密并进行Base64编码。这将产生12个字符的输出

要恢复输入,请将加密的Base64解码为数据,解密该数据并删除2个随机字节

可能的加密算法包括,DES和其他


注意:对于更大范围的不同输出,6位数字可以首先转换为3字节的二进制表示形式,允许5个随机字节为相同的6位输入生成2^40个不同的输出。

请在您的帖子中包含一些示例输入和输出,而不是作为注释。可以通过多种方式读取最大4个整数。还有,为什么长度对你如此重要?它只是一个纯整数,输入最多4个整数,输出最多15个字母数字。你可以问你的领导为什么他/她要这样做?另外,我不知道6整数是什么意思。可能重复:意味着6参数我可以知道如何解密吗?@RyanShine根据我的要求使用的无法解密的代码,我不将密码存储在DB中,因为我使用哈希算法加上salt,然后concat,然后解密。我不知道你的要求。但这会对你有所帮助:为什么两个人不介意自己的事情,而把选票交给一个初学者呢?我只是想帮你。问题中的注意:最多可以有15段加密字符串,太复杂了,无法理解,但是我们需要能够逆转,我已经编辑了我的问题,也许你可以看看,以确定我应该使用哪种加密方法