java 常见的加密算法

java 常见的加密算法

加密算法分类:

v 只能加密:SHA  MD5

v 既能加密也能解密:

对称:DES  RC4

非对称:RSA

非对称加密技术开销比较大,不适合大文本的加密。

Java代码实现SHA算法

/*

SHA(Secure Hash Algorithm,安全散列算法),数字签名等密码学应用中重要的工具,

被广泛地应用于电子商务等信息安全领域。虽然,SHA与MD5通过碰撞法都被破解了,

但是SHA仍然是公认的安全加密算法,较之MD5更为安全*/

public class SHAEncode {

public static final String KEY_SHA = "SHA1";

public static String shaDigest(byte[] source) throws NoSuchAlgorithmException {

String encrpt = null;

MessageDigest md = MessageDigest.getInstance(KEY_SHA);

md.update(source);

//得到数据摘要

byte[] digest = md.digest();

//把二进制数组转换成十六进制字符串

encrpt = Byte2HexStrUtil.byte2HexStr(digest);

return encrpt;

}

}

Java代码实现MD5算法

/**

* 获取加密后的字符串

* @param input

* @return

*/

public static String md5Digest(String data) {

try {

// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)

MessageDigest messageDigest =MessageDigest.getInstance("MD5");

// 输入的字符串转换成字节数组

byte[] inputByteArray = data.getBytes();

// inputByteArray是输入字符串转换得到的字节数组

messageDigest.update(inputByteArray);

// 转换并返回结果,也是字节数组,包含16个元素

byte[] resultByteArray = messageDigest.digest();

// 字符数组转换成字符串返回

return byteArrayToHex(resultByteArray);

} catch (NoSuchAlgorithmException e) {

return null;

}

}

public static String byteArrayToHex(byte[] byteArray) {

// 首先初始化一个字符数组,用来存放每个16进制字符

char[] hexDigits = {‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘, ‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘ };

// new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))

char[] resultCharArray =new char[byteArray.length * 2];

// 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去

int index = 0;

for (byte b : byteArray) {

resultCharArray[index++] = hexDigits[b>>> 4 & 0xf];

resultCharArray[index++] = hexDigits[b& 0xf];

}

// 字符数组组合成字符串返回

return new String(resultCharArray);

}

java实现DES加密算法

/**

* DES加密

* @param source

* @return

*/

public static String desEncrypt(String source){

if(source == null || source.length() ==0){

return null;

}

try {

//DES算法要求有一个可信任的随机数源

SecureRandom sr = new SecureRandom();

//从原始密钥数据创建一个DESKeySpec对象

DESKeySpec dks = new DESKeySpec(DES_KEY.getBytes());

SecretKeyFactory keyFactory =

SecretKeyFactory.getInstance("DES");

//生产密钥

SecretKey key = keyFactory.generateSecret(dks);

//Cipher对象实际完成加密操作

Cipher cipher = Cipher.getInstance("DES");

//使用密钥初始化Cipher对象

cipher.init(Cipher.ENCRYPT_MODE,key,sr);

byte [] data =source.getBytes();

//加密

byte [] encryptedData = cipher.doFinal(data);

//转成16进制串

String hexString = HexUtil.byte2HexStr(encryptedData);

return hexString;

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (InvalidKeySpecException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

}

return null;

}

/**

* DES解密

* @param source

* @return

*/

public static String desDecrypt(String source){

if(source == null || source.length() ==0){

return null;

}

try {

//DES算法要求有一个可信任的随机数源

SecureRandom sr = new SecureRandom();

//从原始密钥数据创建一个DESKeySpec对象

DESKeySpec dks = new DESKeySpec(DES_KEY.getBytes());

SecretKeyFactory keyFactory =

SecretKeyFactory.getInstance("DES");

SecretKey key = keyFactory.generateSecret(dks);

//Cipher对象实际完成解密操作

Cipher cipher = Cipher.getInstance("DES");

//使用密钥初始化Cipher对象

cipher.init(Cipher.DECRYPT_MODE,key,sr);

//将十六进制串转成字节数组

byte [] data =HexUtil.hex2Byte(source);

//解密

byte [] decryptedData = cipher.doFinal(data);

return new String(decryptedData);

} catch (InvalidKeyException e) {

e.printStackTrace();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

} catch (InvalidKeySpecException e) {

e.printStackTrace();

} catch (NoSuchPaddingException e) {

e.printStackTrace();

} catch (IllegalBlockSizeException e) {

e.printStackTrace();

} catch (BadPaddingException e) {

e.printStackTrace();

}

return null;

}

3DES加密算法

Java实现3DES加密算法

1、加入bcprov-jdk16-145.jar包支持

public class ThreeDESUtil {

// 算法名称

public static final String KEY_ALGORITHM = "desede";

// 算法名称/加密模式/填充方式

public static final String CIPHER_ALGORITHM = "desede/CBC/NoPadding";

/** *//**

* CBC加密

* @param key 密钥

* @param keyiv IV

* @param data 明文

* @return Base64编码的密文

* @throws Exception

*/

public static byte[] des3EncodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exception {

Security.addProvider(new BouncyCastleProvider());

Key deskey = keyGenerator(new String(key));

Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);

IvParameterSpec ips = new IvParameterSpec(keyiv);

cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);

byte[] bOut = cipher.doFinal(data);

for (int k = 0; k < bOut.length; k++) {

System.out.print(bOut[k] + " ");

}

System.out.println("");

return bOut;

}

/** *//**

*

* 生成密钥key对象

* @param KeyStr 密钥字符串

* @return 密钥对象

* @throws InvalidKeyException

* @throws NoSuchAlgorithmException

* @throws InvalidKeySpecException

* @throws Exception

*/

private static Key keyGenerator(String keyStr) throws Exception {

byte input[] = HexString2Bytes(keyStr);

DESedeKeySpec KeySpec = new DESedeKeySpec(input);

SecretKeyFactory KeyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);

return ((Key) (KeyFactory.generateSecret(((java.security.spec.KeySpec) (KeySpec)))));

}

private static int parse(char c) {

if (c >= ‘a‘) return (c - ‘a‘ + 10) & 0x0f;

if (c >= ‘A‘) return (c - ‘A‘ + 10) & 0x0f;

return (c - ‘0‘) & 0x0f;

}

// 从十六进制字符串到字节数组转换

public static byte[] HexString2Bytes(String hexstr) {

byte[] b = new byte[hexstr.length() / 2];

int j = 0;

for (int i = 0; i < b.length; i++) {

char c0 = hexstr.charAt(j++);

char c1 = hexstr.charAt(j++);

b[i] = (byte) ((parse(c0) << 4) | parse(c1));

}

return b;

}

/** *//**

* CBC解密

* @param key 密钥

* @param keyiv IV

* @param data Base64编码的密文

* @return 明文

* @throws Exception

*/

public static byte[] des3DecodeCBC(byte[] key, byte[] keyiv, byte[] data) throws Exception {

Key deskey = keyGenerator(new String(key));

Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);

IvParameterSpec ips = new IvParameterSpec(keyiv);

cipher.init(Cipher.DECRYPT_MODE, deskey, ips);

byte[] bOut = cipher.doFinal(data);

return bOut;

}

public static void main(String[] args) throws Exception {

byte[] key = "6C4E60E55552386C759569836DC0F83869836DC0F838C0F7".getBytes();

byte[] keyiv = { 1, 2, 3, 4, 5, 6, 7, 8 };

byte[] data = "amigoxie".getBytes("UTF-8");

System.out.println("data.length=" + data.length);

System.out.println("CBC加密解密");

byte[] str5 = des3EncodeCBC(key, keyiv, data);

System.out.println(new sun.misc.BASE64Encoder().encode(str5));

byte[] str6 = des3DecodeCBC(key, keyiv, str5);

System.out.println(new String(str6, "UTF-8"));

}

}

时间: 2024-08-07 23:49:49

java 常见的加密算法的相关文章

Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解

说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括了用户登入.数字签名.数据传输等多个场合.今天我把常见的加密算法全部整理在这里,供大家学习参考. 首先,大家要知道加密算法能干什么,利用加密算法来对数据通信的过程进行加密传输是一种最常见的安全手段.利用该手段能够达到一下三个目的: 1.数据保密性,防止用户数据被窃取或泄露: 2.数据完整性,防止用户传输的数据被篡改: 3.通信双方身份确认,确保数据来源合法: 常见

Android常见的加密算法

Android中常见的加密算法按可逆不可逆分为两大类吧. 1.不可逆的算法 主要为MD5和SHA-1算法. 相同点:都是使用目前比较广泛的散列(Hash)函数,就是把任意长度的输入,变换成固定长度的输出,该输出就是散列值.计算的时候所有的数据都参与了运算,其中任何一个数据变化了都会导致计算出来的Hash值完全不同.(理论上来讲产生的密文都有可能产生碰撞) 不同点:MD5输出是128位的,SHA-1输出是160位的,MD5比SHA1运行速度快,SHA1比MD5强度高.MD5一般用于文件的校验,SH

java常见修饰符总结

1.访问修饰符:public 对外公开  所有是类都能访问 protected 受保护的 子类及其同一个包中的类可以访问 默认的:没有访问修饰符,只向同一个包中的类公开 private : 私有的 只有类本身可以访问,不对外公开 2.abstract :可以用来修饰类和成员方法 A:用该修饰符修饰的类表示抽象类,抽象类位于继承树的抽象层,该类不能被实例化,即不允许创建抽象类本身的实例 B:用该修饰符修饰的方法表示抽象方法,该方法没有方法体,抽象方法是用来表述系统具有什么功能,但不提供具体的实现.

java常见的控制语句

/** * java常见的控制流语句 * @author javawg * @version 2016-11-20 * */ public class IfTest { public static void main(String[] args) {  // TODO Auto-generated method stub  int a = 3 ;  int b = 5 ;  if(a > b) {   System.out.println("A > B");  } else

Java常见知识问答

1.ArrayList.LinkedList区别(http://pengcqu.iteye.com/blog/502676#bc2374415) 2.java.util.Arrays.Java.util.Collections.System.arraycopy介绍 3.HashCode和equals方法 4.StringBuilder和StringBuffer 5.为什么处理排序的数组比非排序的快?(https://github.com/giantray/stackoverflow-java-t

java常见文件操作

收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPath.exists()) { myFolderPath.mkdir(); } } catch (Exception e) { System.out.println("新建目录操作出错"); e.printStackTrace(); } //2.创建文件 //impor

Java常见错误列表

Java常见错误列表: 找不到符号(symbol) 类X是public的,应该被声明在名为X.java的文件中 缺失类.接口或枚举类型 缺失X 缺失标识符 非法的表达式开头 类型不兼容 非法的方法声明;需要返回类型 数组越界(java.lang.ArrayIndexOutOfBoundsException) 字符越界(java.lang.StringIndexOutOfBoundsException) 类Y中的方法X参数不匹配 缺少return语句 精度损失 在解析时到达了文件结尾 执行不到的语

常见的加密算法

常用的加密算法有哪些(附详细介绍) 常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法.对称加密指加密和解密使用相同密钥的加密算法.对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性.假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦.对称加密算法的安全性取决于加密密钥的保存情况,但要求企业中每一个持有密钥的人都保守秘密是不可能的,

java常见的集合框架有哪些?

java常见的集合框架有哪些?很多学习java的朋友会问到这个问题,那么学习Java集合框架下大致可以分为如下五个部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections).今天西安java培训小编为大家分享. Java集合类的整体框架如下: 从上图中可以看出,集合类主要分为两大类:Collection和Map. Collection是List.Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主要又