JAVA实现AES和MD5加密
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加密的更多相关文章
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
本文为投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e ...
- 利用Java自带的MD5加密
package test.md5; import java.security.MessageDigest; public class MD5Util { public final static Str ...
- 利用Java自带的MD5加密java.security.MessageDigest;
MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著 ...
- Java实现对文本文件MD5加密并ftp传送到远程主机目录
需求描述: 客户出完账之后需要把出账的数据以文本文件的方式传送给收入管理系统,客户以前是通过本地的一个工具软件上传的,由于安全监管的原因,不允许在本地使用工具上传,因此客户希望我们在已经上线使用的系统 ...
- JAVA中简单的MD5加密类(MD5Utils)
MD5加密分析: JDK API: 获取对象的API: 加密的API: package cn.utils; import java.security.MessageDigest; im ...
- Hook Java API以获得MD5加密前数据
Java实现MD5加密 在Java中,我们用MD5对数据进行加密,代码大概是这样的: import java.security.MessageDigest; import java.security. ...
- java ldap用户密码md5加密
在这里不过多介绍ldap,因为这样的文章特别多,这里就简单直接的记录这一个问题. 在springboot中通过引入spring-boot-starter-data-ldap,使用LdapTemplat ...
- AES,BigInteger,MD5加密
http://tool.oschina.net/apidocs/apidoc?api=jdk-zh package cn.com.gome.cashier.web; import java.lang. ...
- Java 实现32位MD5加密
MD5介绍[链接] Java代码实现 public class Md5Util { private String Md5Util(String s) { try { MessageDigest md ...
随机推荐
- iOS学习笔记(十四)——打电话、发短信
电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...
- Swift - 07 - 布尔类型
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- Asp.net 主题 【1】
页面中默认的显示样式太朴素,一页一页的设置控件的显示样式效率又太低,主题和皮肤则提供了一种高效的设计方案. 一.添加主题 二.添加皮肤文件(.skin): 在皮肤文件中添加如下代码 <asp ...
- python列表、字典与csv
在日常数据分析时最常打交道的是csv文件和list,dict类型.涉及到的主要需求有: 将一个二重列表[[],[]]写入到csv文件中 从文本文件中读取返回为列表 将一字典写入到csv文件中 从csv ...
- 限制窗口拉伸范围——WM_GETMINMAXINFO
注意:此方法对CListCtrl的Report模式下的表头绘制有影响,用时需注意测试! 使用OnSizing的改进版 该例程用处为将窗口限制了大小,并且只允许上下拉伸.需要注意的是WM_GETMINM ...
- Python datetime time 常用操作
测试版本: Python 2.7 获取当前时间的两种方法 import datetime,time now = time.strftime("%Y-%m-%d %H:%M:%S") ...
- Jquery的外部链接和编写样式
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></ ...
- 直接引用windows命名空间
再逛博客的时候,看见一段这样代码.获取系统密码的 static void DumpCredentials(Windows.Security.Credentials.PasswordCredential ...
- VS2013下的Nmake编译链接成win XP的可执行程序
nmake下没有指定toolset=vc120_xp等类似物.但是,可以指定Link.exe的链接参数,指定子系统就可以了,/SUBSYSTEM:[WINDOWS | CONSOLE],5.01 5. ...
- js中数字计算精度
其实同样的问题在java中也有存在,同样是浮点数的问题 问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一 ...