在软件开发过程中,往往会有很多的地方需要用的数据的加密处理,不论是在PC端的 系统应用,还是 在移动端的应用。
常见的数据加密方式:
1、常用密钥算法
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
RC2和 RC4:用变长密钥对大量数据进行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件快的长度也是可变的;
DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法;
BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
其它算法,如ElGamal、Deffie-Hellman、新型椭圆曲线算法ECC等。
2、单向散列算法
MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法,MD5被广泛使用,可以用来把不同长度的数据块进行暗码运算成一个128位的数值;
SHA(Secure Hash Algorithm)这是一种较新的散列算法,可以对任意长度的数据运算生成一个160位的数值;
MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。
CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传 输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。
在上述这些 加密算法中,我具体描述一下 一个再 常见的登录时候用的加密方式,想必 登录功能 在很多的地方都有用到,但是要实现登录功能时,为了保护到客户的用户名和密码,那就得做好数据的加密处理了。下面我主要通过登录功能来阐述数据的加密。
数据的加密方式:SHA512、Base64、HmacSHA512 三中结合形式。
大概的流程:
1、先有用户输入的UserName通过Http协议请求服务器的API获取 数据加密处理的密钥,在把用户的UserPWD和密钥结合组成新的密钥。
String newPwd = userPwdT + obj.getString("salt");
2、得到新的密钥之后,通过 SHA512处理
byte[] hashPwd = DigestUtils.encodeSHA512(newPwd.getBytes());
3、再通过 Base64处理新的字节码密钥
String encryptedPWD = Base64.encodeBytes(hashPwd);
4、// 接着用生成的base64的字符串作为密钥,使用HmacSHA512算法加密返回的key值。
byte[] keyHash = Hmac.encodeHmacSHA512(obj.getString("key").getBytes(),encryptedPWD.getBytes());
5、最后在 Base64 处理加密的密钥,上传到服务器
String encryptedKey = Base64.encodeBytes(keyHash);
再加上后续上传的加密工具类即可。