package test;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Encoder; public class Test { public static void main(String[] args) {
BASE64Encoder encode = new BASE64Encoder();
String a = encode.encode(aesEncrypt("123456","123456"));
String b = encode.encode(md5Encrypt("123456"));
System.out.println(a);
System.out.println(a.length());
System.out.println(b);
System.out.println(b.length());
} /**
* AES加密
*
* @param content 需要加密的内容
* @param password 加密密码
* @return
*/
public static byte[] aesEncrypt(String content, String password) {
try {
//获取AES密钥生成器
KeyGenerator kgen = KeyGenerator.getInstance("AES");
//使用用户提供的随机源初始化密钥生成器,密钥大小为128位。
kgen.init(128, new SecureRandom(password.getBytes()));
//生成密钥
SecretKey secretKey = kgen.generateKey();
//获取基本编码格式密钥,如果不支持编码则返回null
byte[] enCodeFormat = secretKey.getEncoded();
//根据给定的字节数组构造一个密钥
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
//创建密码器
Cipher cipher = Cipher.getInstance("AES");
//使用UTF-8将加密内容编码为byte序列
byte[] byteContent = content.getBytes("utf-8");
//用密钥初始化此密码器为加密模式的常量
cipher.init(Cipher.ENCRYPT_MODE, key);
//按单部分操作加密数据并返回
return cipher.doFinal(byteContent);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
} public static byte[] md5Encrypt(String str){
try {
MessageDigest digest = MessageDigest.getInstance("Md5");
return digest.digest(str.getBytes());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}

MD5在论坛上、软件发布时经常用,是为了保证文件的正确性,防止一些人盗用程序,加些木马或者篡改版权,设计的一套验证系统。

AES又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

所以在网站进行密码加密的情况下推荐使用AES算法加密,虽然MD5使用较为广泛,但简单密码容易被碰撞破解。

JAVA实现AES和MD5加密的更多相关文章

  1. iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

    本文为投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e ...

  2. 利用Java自带的MD5加密

    package test.md5; import java.security.MessageDigest; public class MD5Util { public final static Str ...

  3. 利用Java自带的MD5加密java.security.MessageDigest;

    MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著 ...

  4. Java实现对文本文件MD5加密并ftp传送到远程主机目录

    需求描述: 客户出完账之后需要把出账的数据以文本文件的方式传送给收入管理系统,客户以前是通过本地的一个工具软件上传的,由于安全监管的原因,不允许在本地使用工具上传,因此客户希望我们在已经上线使用的系统 ...

  5. JAVA中简单的MD5加密类(MD5Utils)

    MD5加密分析:   JDK API:   获取对象的API:   加密的API:   package cn.utils; import java.security.MessageDigest; im ...

  6. Hook Java API以获得MD5加密前数据

    Java实现MD5加密 在Java中,我们用MD5对数据进行加密,代码大概是这样的: import java.security.MessageDigest; import java.security. ...

  7. java ldap用户密码md5加密

    在这里不过多介绍ldap,因为这样的文章特别多,这里就简单直接的记录这一个问题. 在springboot中通过引入spring-boot-starter-data-ldap,使用LdapTemplat ...

  8. AES,BigInteger,MD5加密

    http://tool.oschina.net/apidocs/apidoc?api=jdk-zh package cn.com.gome.cashier.web; import java.lang. ...

  9. Java 实现32位MD5加密

    MD5介绍[链接] Java代码实现 public class Md5Util { private String Md5Util(String s) { try { MessageDigest md ...

随机推荐

  1. [转] 关于UIView

    [转载] 原文地址 :http://blog.csdn.net/itianyi/article/details/8982518 UIView是开发中使用得最多的控件了,深入的理解很有必要. UIVie ...

  2. 重新开始学习javase_控制程序流程

    @学习thinking in java 二.控制程序流程 负数使用 Java 运算符:运算符以一个或多个自变量为基础,可生成一个新值.自变量采用与原始方法调用不同的一种形式,但效果是相同的.根据以前写 ...

  3. jquery mobile navbar

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. 数据类型和Json格式[转]

    1. 前几天,我才知道有一种简化的数据交换格式,叫做yaml. 我翻了一遍它的文档,看懂的地方不多,但是有一句话令我茅塞顿开. 它说,从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一 ...

  5. phpstorm配置xdebug

    首先配置好xdebug 在php.ini里面加入以下配置(修改完注意重启apache或nginx): [xdebug] zend_extension="/usr/local/opt/php5 ...

  6. 修改PHP的默认时区

    每个地区都有自己的本地时间,在网上及无线电通信中,时间的转换问题显得格外突出.整个地球分为24个时区,每个时区都有自己的本地时间.在国际无线电或网络通信场合,为了统一起见,使用一个统一的时间,成为通用 ...

  7. mongoDB之用户及权限设置

    之前用MongoDB没有设置用户和权限,一直都是本机应用程序连接MongoDB.在服务器上部署后对外没有开数据库连接端口,本机应用程序连接再开放应用程序端口供外部访问. 我部署的环境是ubuntu 1 ...

  8. MVC中的模型注解

    authour: chenboyi updatetime: 2015-04-26 21:28:42 friendly link:   目录: 1,思维导图 2,内容解析 3,CodeSimple 1, ...

  9. 基于OSGi的企业级快速开发平台(开源)

    模块化.插件化是未来的主流趋势,他很好的解决了,公司知识的积累.应用分发.商务模式.快速构建等一系列问题,国外著名的插件化平台JIRA就非常成功,国内的目前很多公司在偿试插件化的开发模式,作为平台推出 ...

  10. Qt Quick分组属性案例

    import QtQuick 2.4 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Win ...