📄 festel.cs
字号:
namespace Festel
{
class FestelAlg
{
public static ulong v;
public static ulong[] k = new ulong[32];
// Thuat toan Festel***********************************************************************
public static void FestelEncode(ref ulong block1, ref ulong block2)
{
ulong tmp;
for (int i = 0; i < 32; i++)
{
tmp = (block1 ^ v) ^ block2;
block2 = block1;
block1 = tmp;
}
tmp = block1;
block1 = block2;
block2 = tmp;
}
// Viet lai
public static void FestelClassis(ulong[] block)
{
ulong tmp;
for (int i = 0; i < 32; i++)
{
tmp = ((block[0] ^ v) >> 9) ^ block[1];
block[1] = block[0];
block[0] = tmp;
}
tmp = block[1];
block[1] = block[0];
block[0] = tmp;
}
// Thuat toan Festel mo rong 1***********************************************************************
public static void FestelEncode1(ref ulong block1, ref ulong block2, ref ulong block3, ref ulong block4)
{
ulong tmp;
for (int i = 1; i <= 32; i++)
{
block4 = block1;
block1 = (block1 ^ v) ^ block2;
block2 = block3;
block3 = block4;
}
tmp = block4;
block2 = block1;
block3 = block2;
block4 = block3;
block1 = tmp;
}
// Thuat toan Festel mo rong 2***********************************************************************
public static void FestelEncode2(ref ulong block1, ref ulong block2, ref ulong block3, ref ulong block4)
{
ulong tmp;
for (int i = 0; i < 32; i++)
{
tmp = (block1 | block2 | block3) ^ block4;
block4 = block1;
block1 = block2;
block2 = block3;
block3 = tmp;
}
tmp = block4;
block2 = block1;
block3 = block2;
block4 = block3;
block1 = tmp;
}
// Thuat toan Festel mo rong 3***********************************************************************
public static void FestelEncode3(ref ulong block1, ref ulong block2, ref ulong block3, ref ulong block4)
{
ulong tmp1, tmp2, tmp3,tmp;
for (int i = 1; i <= 32; i++)
{
tmp1 = (block1 ^ v) ^ block2;
tmp2 = (tmp1 ^ block3);
tmp3 = tmp2 ^ block4;
block4 = block1;
block3 = tmp3;
block2 = tmp2;
block1 = tmp1;
}
tmp = block4;
block2 = block1;
block3 = block2;
block4 = block3;
block1 = tmp;
}
public static void FestelModif(ulong[] block, int flag)
{
ulong tmp;
//32 rounds
for (int i = 1; i <= 32; i++)
{
switch (flag)
{
//type 1
case 1:
tmp = block[0];
block[0] = (block[0] ^ v) ^ block[1];
block[1] = block[2];
block[2] = block[3];
block[3] = tmp;
break;
//type 2
case 2:
tmp = (block[0] | block[1] | block[2]) ^ block[3];
block[3] = block[0];
block[0] = block[1];
block[1] = block[2];
block[2] = tmp;
break;
//type 3
case 3:
ulong tmp1, tmp2, tmp3;
tmp1 = (block[0] ^ v) ^ block[1];
tmp2 = (tmp1 ^ block[2]);
tmp3 = tmp2 ^ block[3];
block[3] = block[0];
block[2] = tmp3;
block[1] = tmp2;
block[0] = tmp1;
break;
}
//last
tmp = block[3];
block[3] = block[2];
block[2] = block[1];
block[1] = block[0];
block[0] = tmp;
}
}
// xu li file***********************************************************************
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -