简单的加密解密算法

本文描述一种项目中采用的简单加密解密算法,通过把多种算法进行组合。特点是同个字符串不同时间加密结果不同,混合了多种加密方式,很难用统计的方式对密文进行破解。

项目中仅是对密码进行加密,规定密码长度不超过16个字符,故以下的算法均是固定长度的。

1)扩展字符串

在加密字符串末加"\0",之后添加随机字符串扩展为32个字节。以系统时间为种子产生随机字符串,确保了同个字符串不同时间加密的结果均不同。

2)字符串移位

整个字符串的二进制位依次后移n*8+4位,此操作打乱了字符串的统计特性。

[cpp]  view plain copy
  1. int n=4;  
  2.     int i;  
  3.     char temp[N];  
  4.     for(i=0;i<N;i++)temp[i]=str[i];  
  5.     for(i=0;i<N;i++)str[i]=((temp[(i+n)%N]<<4)&0xF0)|((temp[(i+n+1)%N]>>4)&0x0F);  
3)单字符替换

本操作是把每个字符替换为另一字符,采用算法是把字符的前后4位对调。

[cpp]  view plain copy
  1. str[i]=((str[i]<<4)&0xF0)|((str[i]>>4)&0x0F);  

4)加入密钥进行异或,密钥字符串自定义

5)整个字符串循环移位,原理同2)但操作单位为字符而不是二进制位


以上2)~5)前后顺序可调换,解密过程与加密过程相反。

若需对任意长字符串加密,只需第16字符分别加密然后进行拼接即可。如果需要将密文转换为可见字符进行传输,可对密文进行base64编码。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值