我们在Web开发中,经常要保证密码的安全性,那么怎么对密码进行处理了?首先得进行加密吧!下面我介绍下Java提供的SHA加密方式;SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局(NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数。
正式名称为SHA 的家族第一个成员发布于1993年。
然而人们给它取了一个非正式的名称SHA-0 以避免与它的后继者混淆。
两年之后,SHA-1,第一个SHA 的后继者发布了。
另外还有四种变体,曾经发布以提升输出的范围和变更一些细微设计:SHA-224, SHA-256, SHA-384 和SHA-512 (这些有时候也被称做SHA-2)。
[java]view plain copy1.package com.chinadatapay.util;2.3.import java.security.MessageDigest;4.5./**6. * SHA 加密算法7. * @author DELL8. *9. */10.11.public class SHAencrypt {12.13./**14. * 定义加密方式15. */16.private final static String KEY_SHA = "SHA";17.private final static String KEY_SHA1 = "SHA-1";18.19./**20. * 全局数组21. */22.private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",23."6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };24.25./**26. * 构造函数27. */28.public SHAencrypt() {29.30. }31.32./**33. * SHA 加密34. * @param data 需要加密的字节数组35. * @return 加密之后的字节数组36. * @throws Exception37. */38.public static byte[] encryptSHA(byte[] data) throws Exception {39.// 创建具有指定算法名称的信息摘要40.// MessageDigest sha = MessageDigest.getInstance(KEY_SHA);41. MessageDigest sha = MessageDigest.getInstance(KEY_SHA1);42.// 使用指定的字节数组对摘要进行最后更新43. sha.update(data);44.// 完成摘要计算并返回45.return sha.digest();46. }47.48./**49. * SHA 加密50. * @param data 需要加密的字符串51. * @return 加密之后的字符串52. * @throws Exception53. */54.public static String encryptSHA(String data) throws Exception {55.// 验证传入的字符串56.if (data == null || data.equals("")) {57.return"";58. }59.// 创建具有指定算法名称的信息摘要60. MessageDigest sha = MessageDigest.getInstance(KEY_SHA);61.// 使用指定的字节数组对摘要进行最后更新62. sha.update(data.getBytes());63.// 完成摘要计算64.byte[] bytes = sha.digest();65.// 将得到的字节数组变成字符串返回66.return byteArrayToHexString(bytes);67. }68.69./**70. * 将一个字节转化成十六进制形式的字符串71. * @param b 字节数组72. * @return 字符串73. */74.private static String byteToHexString(byte b) {75.int ret = b;76.//System.out.println("ret = " + ret);77.if (ret < 0) {78. ret += 256;79. }80.int m = ret / 16;81.int n = ret % 16;82.return hexDigits[m] + hexDigits[n];83. }84.85./**86. * 转换字节数组为十六进制字符串87. * @param bytes 字节数组88. * @return 十六进制字符串89. */90.private static String byteArrayToHexString(byte[] bytes) {91. StringBuffer sb = new StringBuffer();92.for (int i = 0; i < bytes.length; i++) {93. sb.append(byteToHexString(bytes[i]));94. }95.return sb.toString();96. }97.}添加一个用户,调用方法对密码进行加密操作,登陆的时候,对登陆的用户输入的密码进行加密,然后通过数据中的密码密码与用户登陆输入的密码进行比较;比如输入密码:Yan230KdString encryptSHA = SahTest.encryptSHA("Yan230Kd");加密后的密码:1dc3a28e6949b07918f3613fa3a2c9342c4e79f4package com.henii.test;import Java.security.MessageDigest;/***先通过MD5加密之后,再来一次可逆的加密。
*顺序可以调整,可以选择先用可逆加密,然后再用MD5加密*/public class MD5andKL{//MD5加密。
32位public static String MD5(String inStr) {MessageDigest md5 = null;try {md5 = MessageDigest.getInstance("MD5");} catch (Exception e) {System.out.println(e.toString());e.printStackTrace();return "";}char[] charArray = inStr.toCharArray();byte[] byteArray = new byte[charArray.length];for (int i = 0; i < charArray.length; i++)byteArray[i] = (byte) charArray[i];byte[] md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++) {int val = ((int) md5Bytes[i]) & 0xff;if (val < 16)hexValue.append("0");hexValue.append(Integer.toHexString(val));}return hexValue.toString();}//可逆的加密算法public static String KL(String inStr){//String s = new String(inStr);char[] a = inStr.toCharArray();for (int i = 0;i <a.length;i++) {a[i] = (char)(a[i]^'t');}String s=new String(a);return s;}//加密后解密public static String JM(String inStr){char[] a=inStr.toCharArray();for (int i = 0;i <a.length;i++) {a[i]= (char)(a[i]^'t');}String k=new String(a);return k;}//测试主函数public static void main (String args[]){String s = new String("admin");System.out.println("原始:"+s);System.out.println("MD5后:"+MD5(s));System.out.println("MD5后再加密:"+KL(MD5(s)));System.out.println("解密为MD5后的:"+JM(KL(MD5(s))));}}、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、Java 自带的数据加密类MessageDigest(MD5或SHA加密)说明:在网站中,为了保护网站会员的用户名和密码等隐私信息,所以我们在用户注册时就直接进行MD5方式或其他方式进行加密,即使是数据库管理员也不能查看该会员的密码等信息,在数据库中查看密码效果如:8e830882f03b2cb84d1a657f346dd41a效果。
因为MD5算法是不可逆的,所以被很多网站广泛使用,普遍使用的三种加密方式方式一:使用位运算符,将加密后的数据转换成16进制方式二:使用格式化方式,将加密后的数据转换成16进制(推荐)方式三:使用算法,将加密后的数据转换成16进制import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/*** 使用Java自带的MessageDigest类* @author xiaokui*/public class EncryptionUtil {/*** 由于MD5 与SHA-1均是从MD4 发展而来,它们的结构和强度等特性有很多相似之处* SHA-1与MD5 的最大区别在于其摘要比MD5 摘要长32 比特(1byte=8bit,相当于长4byte,转换16进制后比MD5多8个字符)。