JAVA 几种常见加密算法
来源:互联网 发布:51单片机课后答案 编辑:程序博客网 时间:2024/05/22 18:23
几种常见加密算法:
1、MD5:Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5用的是哈希函数,在计算机网络中应用较多的不可逆加密算法有RSA公司发明的MD5算法和由美国国家技术标准研究所建议的安全散列算法SHA。
2、SHA1:安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。
3、Base64:编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充’=’号,并将标准Base64中的“+”和“/”分别改成了“*”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
此外还有一些变种,它们将“+/”改为“-”或“.”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
代码模块如下:
//MD5摘要后转大写 String str0 = DigestUtils.md5Hex("abc").toUpperCase(); System.out.println(str0);//SHA1 String str1=DigestUtils.shaHex("abc"); System.out.println(str1);//Base64加密 String str2= "abc"; // abc为要加密的字符串 //一般加密byte[] b = Base64.encodeBase64(str2.getBytes(), true);//URL参数传递避免特殊符号byte[] b = Base64.encodeBase64URLSafe(str2.getBytes()); System.out.println(new String(b));//Base64解密 String str3 = "YWJj"; // YWJj为要解密的字符串 byte[] b1 = Base64.decodeBase64(str3.getBytes()); System.out.println(new String(b1));
===================
import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import sun.misc.BASE64Decoder;public class PasswdUtil { /** * SHA加密 * @param decript * @return */ public static String SHA1(String input) { if(input == null){ return ""; } try { MessageDigest digest = java.security.MessageDigest .getInstance("SHA-1"); digest.update(input.getBytes()); byte messageDigest[] = digest.digest(); // Create Hex String StringBuffer hexString = new StringBuffer(); // 字节数组转换为 十六进制 数 for (int i = 0; i < messageDigest.length; i++) { String shaHex = Integer.toHexString(messageDigest[i] & 0xFF); if (shaHex.length() < 2) { hexString.append(0); } hexString.append(shaHex); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } /** * MD5加密 * @param input * @return */ public static String MD5(String input) { if(input == null){ return ""; } try { // 获得MD5摘要算法的 MessageDigest 对象 MessageDigest mdInst = MessageDigest.getInstance("MD5"); // 使用指定的字节更新摘要 mdInst.update(input.getBytes()); // 获得密文 byte[] md = mdInst.digest(); // 把密文转换成十六进制的字符串形式 StringBuffer hexString = new StringBuffer(); // 字节数组转换为 十六进制 数 for (int i = 0; i < md.length; i++) { String shaHex = Integer.toHexString(md[i] & 0xFF); if (shaHex.length() < 2) { hexString.append(0); } hexString.append(shaHex); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } /** * BASE64解密 */ public static String decryptBASE64(String input) { if (input == null){ return ""; } BASE64Decoder decoder = new BASE64Decoder(); String pwd = ""; try { byte[] b = decoder.decodeBuffer(input); pwd = new String(b); } catch (Exception e) { e.printStackTrace(); } return pwd; } /** * BASE64加密 */ public static String encryptBASE64(String input) { if(input == null){ return ""; } return new sun.misc.BASE64Encoder().encode(input.getBytes()); }}
- JAVA 几种常见加密算法
- 几种常见加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- 几种JAVA加密算法
- SSL协议和几种常见加密算法
- 几种常见加密算法解析及使用
- 几种常见加密算法解析及使用
- 常见的几种安全加密算法
- 几种常见加密算法初窥及如何选用加密算法
- 几种常见加密算法初窥及如何选用加密算法
- 几种常见加密算法初窥及如何选用加密算法
- Webdriver处理嵌入的iframe
- mysql order by 造成语句 执行计划中Using filesort,Using temporary相关语句的优化解决
- Xcode项目上传到git
- ajax异步调用的底层实现
- Dailog开发新方法
- JAVA 几种常见加密算法
- 黑马程序员_JAVA异常类的笔记
- InputStream OutputStream
- 设计模式之状态模式
- Xcode7 无法请求到数据, iOS9无法请求HTTP类型的数据
- iOS判断键盘弹出和隐藏
- Android 事件总线OTTO用法快速入门
- UITextView的超链接问题
- Linux配置时间服务器