热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

换位加密法与解密的实现 VC 版

发布时间:2013-05-12 22:50文章来源:网络文章作者:秩名 点击次数:
摘要:今天看了guset 牛的贴子换位加密法与解密 感觉这个加解密比较简单但也比较巧妙,小菜平时作为伸手党,很遗憾没能力为论坛做贡献,今天就把这个算法用VC实现一下,把代码分享给论坛的基友,算是对论坛的一点支持吧 欢迎大家拍砖! 关于换位加密法 guset牛在他...

今天看了guset 牛的贴子<<换位加密法与解密>> 感觉这个加解密比较简单但也比较巧妙,小菜平时作为伸手党,很遗憾没能力为论坛做贡献,今天就把这个算法用VC实现一下,把代码分享给论坛的基友,算是对论坛的一点支持吧…… 欢迎大家拍砖!

关于换位加密法 guset牛在他的贴子中说得比较清楚了(其实是度娘的,呵呵,^_^),这里就不赘述,也看到guset牛 尝试写了一个解密函数,但是不对,小菜觉得guset牛在代码中可能忽略了对密钥的排序(不知是不是代码没有贴出来),并且貌似代码中数组下标溢出了,所以会一运行就关闭了…………。

在今天写代码实现的时候才发觉,这个密钥的排序与整理确实比较重要,下们就帖出关键的代码吧,一个是排序,这个估计大家都懂。

0×01 密钥排序
//对Key进行排序

 

bool Encrypt::GetKeySort()
{
int AllSort[MINGCODEMAXLEN] = {-1}; // 用"空间定位法"进行排序
memset(AllSort,-1,sizeof(AllSort));

int len = strlen(MysortChar);

//确定在字符表中的位置
for(int i = 0 ; i &lt; lenKey ; i++)
{
for(int j = 0 ; j &lt; len; j++)
{
if(Key[i] == MysortChar[j])
AllSort[j] = i;
}
}

int index = 0;
//确定排序前后位置
for(int t = 0 ; t &lt; len ; t++) { if(AllSort[t]&gt;=0) //存在该字符
{
KeySort[index] = AllSort[t] ; // index 代表排序位置 KeySort[index] 代表 该位置的字符在原字符串的位置
index++;
}
}

return true;
}

0x 02 解密函数

//进行解密
bool Encrypt::DoDeEncrypt()
{

GetKeySort(); //关键是对Key进行排序

int i , j=0;
int iIndex = 0;
int iRol = 0;

for(i = 0 ; i &lt; lenKey ; i++) //实现排序后的程序
{

j = KeySort[i] ;
iRol = 1;
while(j &lt; lenCipher)
{
PlaintText[j] = Ciphertext[iIndex++];
j = iRol*lenKey + KeySort[i];
iRol++;
}

}
PlaintText[lenCipher] = 0;

return true;
}

0×03 加密函数

bool Encrypt::DoEncrypt()
{
GetKeySort(); //对Key排序

int i , j=0;
int iIndex = 0;
int iRol = 0;

for(i = 0 ; i &lt; lenKey ; i++) //实现排序后的程序
{

j = KeySort[i] ;
iRol = 1;
while(j &lt; lenPlain)
{
Ciphertext[iIndex++] = PlaintText[j]; //解密其实就是加密的逆过程
j = iRol*lenKey + KeySort[i];
iRol++;
}

}
Ciphertext[iIndex] = 0; //

return true;
}

大家可以看到,其实加密与解决过程都是比较简单的。小菜在这里就不多解释了,下面附上成品与源代码,欢迎大家拍砖与指正!

效果图:

 

 
换位加密法与解密的实现

 

标签分类:

上一篇:一个关于加密算法的简单讨论帖子
下一篇:JBOSS解密数据库连接池的问题汇总