在ctf比赛以及各种加密解密的游戏中,经常会遇到各种加密信息需要解密。
在此,我总结了一些常见的加密方法(有的比较古老比较经典),持续更新。
##凯撒密码
##维吉尼亚密码
##栅栏密码
##CRC32
CRC码实质上是循环冗余校验码,是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。
而CRC32就是其中的一种,其算法能够根据原数据生成8位16进制的CRC码。
正是因为这个功能,它也可以被用作特定情况下的数据加密。
在JAVA的标准库中就有现成的类可以实现对字符串的CRC32的加密。
参考:
##摩斯密码
##MD5
MD5 即 Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。
MD5算法具有以下特点:
- 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
- 容易计算:从原数据计算出MD5值很容易。
- 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
- 弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
- 强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
因此其作用是让大容量信息在用数字签名软件签署私人密钥前被”压缩”成一种保密的格式(也就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
MD5密文特点
- 标准MD5加密时,密文为32位或16位
- 加密过程可以进行加盐,或多次加密等等
- 其他加密类型参考这里
MD5应用:
- 一致性验证,即文件校验
- 数字证书,即指纹识别
- 安全访问认证,即操作系统的登录认证等
参考: