求简单的对称加密算法!!!!!!!!

2025-04-05 00:46:45
推荐回答(2个)
回答1:

你的加密有问题 会有歧义码:
比如0->3 9->3 如果还原的话 3 还原到0,9就丢失了:
因为-1%9 = -1 所以要还原必须再多加一个周期
(9-1)%9 = 8:
void DeChar(char* p)
{
for( int i=0; i {
if (p[i] >= '0' && p[i] <= '9' )
{
p[i] = (((p[i] - 3 + '9'-'0') - '0') % ('9'-'0')) + '0';
}else if( p[i] >= 'a' && p[i] <= 'z' )
{
p[i] = (((p[i] - 4 + 'z' - 'a' ) - 'a') % ('z' - 'a') ) + 'a';
}else if( p[i] >= 'A' && p[i] <= 'Z' )
{
p[i] = (((p[i] - 5 + 'Z' - 'A' )- 'A') % ('Z' - 'A')) + 'A';
}
}
}

把取模增加1就好了 改一下:
void EnChar(char* p)
{
for( int i=0; i {
if (p[i] >= '0' && p[i] <= '9' )
{
p[i] = (((p[i] + 3) - '0') % ('9'-'0'+1)) + '0';
}else if( p[i] >= 'a' && p[i] <= 'z' )
{
p[i] = (((p[i] + 4) - 'a') % ('z' - 'a'+1) ) + 'a';
}else if( p[i] >= 'A' && p[i] <= 'Z' )
{
p[i] = (((p[i] + 5) - 'A') % ('Z' - 'A'+1)) + 'A';
}
}
}

void DeChar(char* p)
{
for( int i=0; i {
if (p[i] >= '0' && p[i] <= '9' )
{
p[i] = (((p[i] - 3 + '9'-'0'+1) - '0') % ('9'-'0'+1)) + '0';
}else if( p[i] >= 'a' && p[i] <= 'z' )
{
p[i] = (((p[i] - 4 + 'z' - 'a'+1 ) - 'a') % ('z' - 'a'+1) ) + 'a';
}else if( p[i] >= 'A' && p[i] <= 'Z' )
{
p[i] = (((p[i] - 5 + 'Z' - 'A' +1)- 'A') % ('Z' - 'A'+1)) + 'A';
}
}
}

回答2:

其实很简单,所谓解密就是逆过程,你将加密算法的结果设置为x,然后用你加密的公式求解,得到的计算公式就是解密算法,看你用的算法,你可以参考“仿射加密算法”就行了