序列号算法

Ka1b1n 2020-05-07 08:36:56
有高手可以详细解释一下下面这段代码的算法吗,是用什么算法将字符串"BF6W3A776"分解成C, c, D, d, B各个变量的。只看懂了异或,像位与&15,左移位<<4都是什么算法?还有如何反过来将C, c, D, d, B生成"BF6W3A776"?谢谢。



string str = "BF6W3A776";
byte C, c, D, d, B;

byte[] bytes = new ASCIIEncoding().GetBytes("m@nq&3$r3T@i1rM#");
int num4 = ("0123456789ABCDEFGHJKLMNPQRTUVWXY".IndexOf(str[0]) ^ bytes[4 % bytes.Length]) & 15;
for (int i = 0; i < 4; i++)
{
if ((num4 & (1 << (i & 0x1f))) != 0)
{
int index = "0123456789ABCDEFGHJKLMNPQRTUVWXY".IndexOf(str[(i * 2) + 1]);
int num3 = (("0123456789ABCDEFGHJKLMNPQRTUVWXY".IndexOf(str[(i * 2) + 2]) << 4) + index) ^ bytes[i % bytes.Length];
if (i == 3)
{
C = (byte)((num3 & 240) >> 4); //1
d = (byte)(num3 & 15); //6
}
else if (i == 2)
{
D = (byte)num3; //20
}
else if (i == 1)
{
c = (byte)num3;
}
else if (i == 0)
{
B = (byte)num3;
}
}
}
...全文
253 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
gp341 2020-06-18
  • 打赏
  • 举报
回复
应该是hash算法把
应该不能返回的

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧