一 开篇
加密与解密这两个操作自打计算机问世已来,就不断的相掐中,各种旧的加密算法不断被破解,又不断涌现出新的加密算法,理论上说没有哪种算法是绝安全无法破解的,只是破解所花的时间成本几乎可以让人认为不具有可操作性,从而认为是相对安全的。
那在实际的工作中,我们也是经常需要用到加密与解密的,比如需要调用其它平台或者其它系统的接口时,相互的数据传输为了安全起见,通常是会要求将数据加密处理的。经过几十年的发展,已经很多的加密算法问世。
二 加密算法 分类
对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES
非对称加密
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)
RSA、DSA ,Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)
哈希 (摘要算法)
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能 会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
MD4 MD5 SHA-1
加密算法大致就分为这三类,具体每一分类下的算法介绍大家可以百度了解,我就不贴了
三 工具简介
之所以要写这个工具,也是因为项目中需要和其它平台去对接数据,为了安全便将数据进行了加密,采用的是对称加密中的 AES 加密算法。
在对接过程中还出了点小麻烦,对方加密时是用的Java加密 而我们则是用C# 解密,Mode是ECB Padding 是PKCS7,但是却怎么也解不开,最终发现在Java里是可以取到将密钥转指定长度后的字符串,而C#里是没有提供这个方法的,所解决方案就是 用Java把密钥生成指定长度后的字符串 直接用做C#的密钥 ,这才能正常的加密与解密。
基本上常用的加密算都包含了, 密钥文本框后面的两个复选框 Base64 与16进制,之所以要加这两个选项,是因为如果直接将加密后返回的byte数据转成字符是会出现乱码的情况的。
另外 DES DES3 AES 这三种加密,密钥都是有长度限制的 具体长度自己试过了就知道啦!
注:某些加密算是区分运算模式的(Mode) CBC, CFB, ECB, OFB, CTS
以及填充械(Padding) None, PKCS7, Zeros, ANSIX923, ISO10126
在双方约定加密时这些都是需要统一制定的
好了 先上一张加密工具的图
四 总结
这个工具只是方便工作,也是自己对加密知识的一个梳理与总结,如果您觉得这个工具对您也有帮助,那就大方的拿去吧 只要随手帮我点个赞,为我的付出给点回报!在下必当感激不尽,
如果您觉得文章或工具有什么不对或者不好的地方,欢迎在评论区留下您的建议!
源码在这里 快点我!快点我!