java 密码解密_【java密码加密与解密】
以下两个类可以很方便的完成字符串的加密和解密:
加密:CryptHelper.encrypt(password)
解密:CrypHelper.decrypt(password)
代码如下:
CryptUtils.java
[java]
package com.gdie.lab.crypt;
import java.io.IOException;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
public class CryptUtils {
private static String Algorithm = "DES";
private static byte[] DEFAULT_KEY=new byte[] {-53, 122, -42, -88, -110, -123, -60, -74};
private static String VALUE_ENCODING="UTF-8";
/**
* 生成密钥
*
* @return byte[] 返回萝卜家园系统下载生成的密钥
* @throws exception
* 扔出异常。
*/
public static byte[] getSecretKey() throws Exception {
KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
SecretKey deskey = keygen.generateKey();
// if (debug ) System.out.println ("生成密钥:"+byte2hex (deskey.getEncoded
// ()));
return deskey.getEncoded();
}
/**
* 将指定的数据根据提供的密钥进行加密
*
* @param input
* 需要加密的数据
* @param key
* 密钥
* @return byte[] 加密后的数据
* @throws Exception
*/
public static byte[] encryptData(byte[] input, byte[] key) throws Exception {
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key, Algorithm);
// if (debug )
// {
// System.out.println ("加密前的二进串:"+byte2hex (input ));
// System.out.println ("加密前的字符串:"+new String (input ));
//
// }
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
byte[] cipherByte = c1.doFinal(input);
// if (debug ) System.out.println ("加密后的二进串:"+byte2hex (cipherByte ));
return cipherByte;
}
public static byte[] encryptData(byte[] input) throws Exception {
return encryptData(input, DEFAULT_KEY);
}
/**
* 将给定的已加密的数据通过指定的密钥进行解密
*
* @param input
* 待解密的数据
* @param key
* 密钥
* @return byte[] 解密后的数据
* @throws Exception
*/
public static byte[] decryptData(byte[] input, byte[] key) throws Exception {
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key, Algorithm);
// if (debug ) System.out.println ("解密前的信息:"+byte2hex (input ));
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE, deskey);
byte[] clearByte = c1.doFinal(input);
// if (debug )
// {
// System.out.println ("解密后的二进串:"+byte2hex (clearByte ));
// System.out.println ("解密后的字符串:"+(new String (clearByte )));
//
// }
return clearByte;
}
public static byte[] decryptData(byte[] input) throws Exception {
return decryptData(input, DEFAULT_KEY);
}
/**
* 字节码转换成16进制字符串
*
* @param byte[] b 输入要转换的字节码
* @return String 返回转换后的16进制字符串
*/
public static String byte2hex(byte[] bytes) {
StringBuilder hs = new StringBuilder();
for(byte b : bytes)
hs.append(String.format("%1$02X", b));
return hs.toString();
}
public static byte[] hex2byte(String content) {
int l=content.length()》1;
byte[] result=new byte[l];
for(int i=0;i
int j=i《1;
String s=content.substring(j, j+2);
result[i]=Integer.valueOf(s, 16)。byteValue();
}
return result;
}
/**
* 将字节数组转换为base64编码字符串
* @param buffer
* @return
*/
public static String bytesToBase64(byte[] buffer) {
//BASE64Encoder en=new BASE64Encoder();
return Base64.encode(buffer);
// return encoder.encode(buffer);
}
/**
* 将base64编码的字符串解码为字节数组
* @param value
* @return
* @throws IOException
*/
public static byte[] base64ToBytes(String value) throws IOException {
//return Base64.decodeToByteArray(value);
// System.out.println(decoder.decodeBuffer(value));
// return decoder.decodeBuffer(value);
return Base64.decode(value);
}
/**
* 加密给定的字符串
* @param value
* @return 加密后的base64字符串
*/
public static String encryptString(String value) {
return encryptString(value, DEFAULT_KEY);
}
/**
* 根据给定的密钥加密字符串
* @param value 待加密的字符串
* @param key 以BASE64形式存在的密钥
* @return 加密后的base64字符串
* @throws IOException
*/
public static String encryptString(String value, String key) throws IOException {
return encryptString(value, base64ToBytes(key));
}
/**
* 根据给定的密钥加密字符串
* @param value 待加密的字符串
* @param key 字节数组形式的密钥
* @return 加密后的base64字符串
*/
public static String encryptString(String value, byte[] key) {
try {
byte[] data=value.getBytes(VALUE_ENCODING);
data=CryptUtils.encryptData(data, key);
return bytesToBase64(data);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
/**
* 解密字符串
* @param value base64形式存在的密文
* @return 明文
*/
public static String decryptString(String value) {
return decryptString(value, DEFAULT_KEY);
}
/**
* 解密字符串
* @param value base64形式存在的密文
* @param key base64形式存在的密钥
* @return 明文
* @throws IOException
*/
public static String decryptString(String value, String key) throws IOException {
String s=decryptString(value, base64ToBytes(key));
return s;
}
/**
* 解密字符串
* @param value base64形式存在的密文
* @param key 字节数据形式存在的密钥
* @return 明文
*/
public static String decryptString(String value, byte[] key) {
try {
byte[] data=base64ToBytes(value);
data=CryptUtils.decryptData(data, key);
return new String(data, VALUE_ENCODING);
}catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
package com.gdie.lab.crypt;
import java.io.IOException;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
public class CryptUtils {
private static String Algorithm = "DES";
private static byte[] DEFAULT_KEY=new byte[] {-53, 122, -42, -88, -110, -123, -60, -74};
private static String VALUE_ENCODING="UTF-8";
/**
* 生成密钥
java 密码解密_【java密码加密与解密】相关推荐
- java gcm_JAVA中的AES GCM加密和解密
我正在尝试在JAVA中实现AES / GCM / NoPadding加密和解密.使用的密钥是来自接收方的公钥和发送方的私钥(ECDH)的共享密钥.加密效果很好(有无iv).但是,我无法解密...... ...
- java存储过程示例_安全密码存储–请勿做的事和Java示例
java存储过程示例 安全存储密码的重要性 作为软件开发人员,我们最重要的职责之一就是保护用户的个人信息. 如果没有我们应用程序的技术知识,用户别无选择,只能相信我们正在履行这一责任. 令人遗憾的是, ...
- java中的Cipher类 (加密和解密)
该类位于javax.crypto包下,声明为 public class Cipher extends Object 此类为加密和解密提供密码功能.它构成了 Java Cryptographic ...
- ROT13加密与解密(一种加密和解密都会得到同样答案的密文)“替换式密码算法”
一. ROT13简介: ROT13(回转13位)是一种简易的替换式密码算法.它是一种在英文网络论坛用作隐藏八卦.妙句.谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥.ROT13 也是过去 ...
- 密码史简介(对称加密以解密)
介绍些从古至今使用的密码方法,以及破解方法.以下所述密码按照现代的标准来看都是不安全的密码,但是其思路沿用至今. Symmetric Ciphers 对称密码 以前使用的密码都可以称为对称密码,具体特 ...
- Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它 ...
- 修改密码问题_修改密码
修改密码问题 As I'm writing this, most of us are stuck around the house due to Covid-19. If you're quarant ...
- java取负数_[Java] 告别“CV 工程师”码出高效!(基础篇)
作为一名资深的 CV 工程师,某天,当我再一次日常看见满屏的报错信息与键盘上已经磨的泛白的 Ctrl.C.V 这三个按键时,我顿悟了. 百度谷歌复制粘贴虽然很香,但是总是依靠前人种树,终会有一天失去乘 ...
- java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习
本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...
- java 文本压缩_[Java基础]Java使用GZIP进行文本压缩
import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.apache.commons.io.outp ...
最新文章
- 给图片加上带版权的水印
- centos6.4 安装mysql
- 水下机器人_相关知识点
- 0127-python内置函数(一).abb
- mysql binaryVInstall
- python在sql添加数据库_使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据...
- 深度学习之RNN、LSTM、GRU篇
- 卡尔玛滤波的原理说明
- OpenGL安装教程
- 微信小程序全栈开发实践 第一章 重新认识微信小程序、及新功能介绍
- keil 不能F12跳转到定义
- 如何用ChemDraw实现3D建模
- 在牛客网上刷哔哩哔哩2021校招题后有感
- Could not retrieve mirrorlist
- 史上最全的CDN内容分发网络实战技巧
- 0315-HttpURLConnection和JASON结合使用(以天气预报为例)
- Spring Boot中使用Spring Data JPA示例
- 手机滚动字幕软件java_提词器app下载
- 在SpringBoot中启用Http2.0
- 为什么那么多人想开发一元夺宝类app?
热门文章
- 前端页面插件集成-Markdown编辑器
- datatable需要多次初始化,使用ajax请求,无法跳到后端接口
- 计算机图形学第二次上机——旋转的三角形
- 交通流预测——day59 交通网络动态性与多权重交通图卷积(MW-TGC)网络的交通预测
- 改善老旧配电室运行环境的方法 辅助监控系统
- 本周四晚19:00知识赋能第八期第3课丨涂鸦小游戏的实现
- 一个奇怪的问题:匿名内部类用Lambda替换以后出现了cannot be cast to class的问题
- 美国服务器网站怎么黑屏了,关于美国服务器IP的常见问题的详细解答!
- SATA游标卡尺测量时显示闪烁
- EasyExcel的Converter注册问题