package com.pingan.main;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import org.apache.commons.codec.binary.Base64;
/**
* DES加密介绍 DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,
* 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,
* 24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现 。
* 注意:DES加密和解密过程中,密钥长度都必须是8的倍数
*/
public class LoginDesUtil {
public LoginDesUtil() {
}
// 测试
public static void main(String args[]) throws Exception {
String plaintext = "that is the New game!";
System.out.println("URLEncode前:" + plaintext);
String key = "T0FgyDSM";
plaintext=URLEncoder.encode(plaintext,"UTF-8");
String ciphertext = LoginDesUtil.encryptDES(plaintext, key);
System.out.println("明文:" + plaintext);
System.out.println("密钥:" + key);
System.out.println("密文:" + ciphertext);
System.out.println("解密后:" + LoginDesUtil.decryptDES(ciphertext, key));
System.out.println("URLEncode后:" + URLDecoder.decode(LoginDesUtil.decryptDES(ciphertext, key),"UTF-8"));
}
private static byte[] iv = { 1, 4, 7, 8, 5, 2, 6, 3 };
public static String encryptDES(String encryptString, String encryptKey)
throws Exception {
IvParameterSpec zeroIv = new IvParameterSpec(iv);
SecretKey key = generateKey(encryptKey);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
return Base64.encodeBase64String(encryptedData);
}
public static String decryptDES(String decryptString, String decryptKey)
throws Exception {
byte[] byteMi = Base64.decodeBase64(decryptString);
IvParameterSpec zeroIv = new IvParameterSpec(iv);
SecretKey key = generateKey(decryptKey);
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
byte decryptedData[] = cipher.doFinal(byteMi);
return new String(decryptedData);
}
public static SecretKey generateKey(String secretKey) throws NoSuchAlgorithmException{
KeyGenerator _generator = KeyGenerator.getInstance("DES");
//防止linux下 随机生成key
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
secureRandom.setSeed(secretKey.getBytes());
_generator.init(56,secureRandom);
// 生成密钥
return _generator.generateKey();
}
}
分享到:
相关推荐
使用RSA非对称加密完成JavaScript前端RSA加密和分段加解密,最近研究了RSA非对称加密,关于什么是RSA,网上各种文章一搜一大把,但是关于如何使用RSA完成前端的组合加密解密,东西就非常少了,并且由于RSA的特性,一...
现在很多做透明加解密的初学者都比较困惑,不知从何下手,我也是如此,从什么都不会开始,慢慢肯文件系统内幕,到OSR上面请教,四个月的时间还是收获颇丰。其实真正研究以后会发现,很多都是体力活,要不断的去跟踪...
实用C#加解密工具集,拿来即用。 包含以下示例代码: SM2、SM3、SM4国密加解密; RSA加解密、签名、验签(XML、PEM密钥格式); DES加解密; BASE64编解码,HEX编解码,MD5加密; 生成GUID,生成唯一KEY。
基于STM32的软件加解密算法,包括DES,3DES的ECB,CBC模式。但是验证时CBC模式的初始向量为0时,数据的加解密正确,但是初始向量不为0时,则加解数据有错误。 注意:经测试DES,3DES的CBC模式初始向量不为0时,加...
supersoft加解密工具
*由于多方尝试并编写Openssl对文件的加解密方法,均以失败告终,所以我们小组绝对采用新的加密算法,即Windows CrytoAPI,由微软公司提出的一种安全 *加密应用服务框架 *CryptoAPI数据加解密,它的流程为: *(加密...
易语言encrypt.fne支持库中文名为易语言超级加解密支持库,本易语言支持库主要是实现数据及文件的加解密。易语言encrypt.fne支持库为一般支持库,需要易语言系统3.0版本的支持,需要易语言系统核心支持库3.0版本的...
rsa加解密
md5加解密md5加解密md5加解密c++
根据AES加解密的原理,利用C语言编写了能实现文件加密功能的AES加解密代码。
前端加解密 后端加解密 JS加解密 JAVA加解密 前端加解密 后端加解密 JS加解密 JAVA加解密 前端加解密 后端加解密 JS加解密 JAVA加解密 前端加解密 后端加解密 JS加解密 JAVA加解密
des加解密说明及代码应用,des加解密服务端java的实现以及对js端应用的实现
易语言字符串加解密源码,字符串加解密,加密文本,处理密码,解密文本
加密软件方便给文档、文件夹各类文件快速加密解密,安全可靠管理自己文件。
DES加密解密(c++实现)
C 语言实现aes加解密
例子代码,用c++实现了先用3DES进行内容的加密再用Base64加密输出,和先用base64解密再用3DES解密输出两个例子,完成了网址常用的加解密输出.代码是用vs2013实现的。
程序包含加解密两个部分,由于密文和明文存在int数组中,所以暂时只能加密数字,需要的人可以自行修改。 程序有一个小bug,输出加解密的结果的时候,会判断数组为空结束输出,但是这里数组初始化为0,故若结果是1101...
采用openssl1.1.0c,支持xxtea/aes加密解密,选择算法后输入秘钥及签名即可完成加密解密,即可加/解密单个文件,也可以指定加解密一个目录下的所有文件.
第三方平台开发者在代替公众号接收和处理消息时,出于安全考虑,必须对消息内容进行必须的加解密。 本文讲述如何使用示例代码接入加解密,参考本文并使用示例代码,加解密的接入将非常简单。若想进一步的了解细节,...