`

【JAVA】加密解密(转http://www.wangchao.net.cn/bbsdetail_1742.html)

    博客分类:
  • java
 
阅读更多
package com.duduli.li;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class Eryptogram {
	private static String Algorithm = "DES";
	// 定义 加密算法,可用 DES,DESede,Blowfish
	static boolean debug = false;

	/**
	 * 构造子注解.
	 */
	public Eryptogram() {

	}

	/**
	 * 生成密钥
	 * 
	 * @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;

	}

	/**
	 * 将给定的已加密的数据通过指定的密钥进行解密
	 * 
	 * @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;

	}

	/**
	 * 字节码转换成16进制字符串
	 * 
	 * @param byte[] b 输入要转换的字节码
	 * @return String 返回转换后的16进制字符串
	 */
	public static String byte2hex(byte[] b) {
		String hs = "";
		String stmp = "";
		for (int n = 0; n < b.length; n++) {
			stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
			if (stmp.length() == 1)
				hs = hs + "0" + stmp;
			else
				hs = hs + stmp;
			if (n < b.length - 1)
				hs = hs + ":";

		}
		return hs.toUpperCase();

	}

	public static void main(String[] args) {
		try {
			debug = false;
			Eryptogram etg = new Eryptogram();
			byte[] key = etg.getSecretKey();
			System.out.println("key = " + key);
			String aa = "你要加密的信息。";
			byte[] data = aa.getBytes();
			System.out.println(data);
			byte[] en = etg.encryptData(data, key);
			System.out.println("encryptData = " + new String(en));
			byte[] de = etg.decryptData(en, key);
			System.out.println("decryptData = " + new String(de));

		} catch (Exception e) {
			e.printStackTrace();

		}
	}
}
分享到:
评论

相关推荐

    WINFORM开发常用矢量小图标

    在WinForm开发中,我们通常使用位图图标(如ICO、PNG等格式),因为.NET Framework提供了丰富的支持。然而,矢量图标可以通过转换工具转换为位图格式,用于WinForm的应用。例如,我们可以使用在线工具或软件如...

    徐州汽车网整站源码含数据下载

    《徐州汽车网》程序是由http//www.wangchao.it/在MediPro汽车门户网站系统的基础上改进而成的地方性汽车类整站程序。有新车报价、二手车、维修保养、汽车用品、汽车租赁、汽车培训、汽车资讯、商户名录等功能频道;...

    Android代码-Android Http请求库okhttp的封装

    -keep class im.wangchao.** { *; } -dontwarn im.wangchao.** -keep class **$$HttpBinder { *; } -keepclasseswithmembernames class * { @im.wangchao.* ; } -keepclasseswithmembernames class * { @im....

    12.2.12.1_0.crx

    IE Tab 让Chrome兼容IE 在Chrome兼容IE 中组件的使用 https://blog.csdn.net/wangchao1988ok/article/details/45193489 使用方法

    chrome参考示例调用ocx.rar

    chrome参考示例调用ocx 适用于谷歌浏览器v45 版本以下 参考使用方法 https://blog.csdn.net/wangchao1988ok/article/details/45193489

    c# FontAswsome的矢量图标库,图标生成

    7. **学习资源**:为了更好地利用Font Awesome,你可以参考官方文档(https://fontawesome.com/icons?d=gallery)查找图标代码,以及在CSDN博客(http://blog.csdn.net/wangchao712217/article/details/79192455)或...

    如何sso(cas)

    NULL 博文链接:https://wangchao-17915566.iteye.com/blog/334582

    ROS导航功能包 程序

    采用URDF文件构建机器人的3D模型,采用gmapping包实现了机器人工作环境的地图构建,这一节将利用amcl包和move_base包实现移动机器人的自主导航。http://blog.csdn.net/wangchao7281/article/details/53691351

    C++ ADO方式连接oracle数据库

    https://blog.csdn.net/wangchao712217/article/details/78728164 这个作者的源代码,但是他的编译不过,我修改过后了,现在是可以的,不缺少文件的。

    MHttp:适用于Android Http的okhttp包装器

    MHttp 适用于Android Http的okhttp包装器。 Gradle: compile ' im.wangchao:mhttp:1.10.1 ' annotationProcessor ' im.wangchao:mhttp-compiler:0.5.2 ' 您可以使用... - keep class im .wangchao.** {

    opencv_build.zip

    1. **OpenCV库**: OpenCV是一个跨平台的库,支持多种编程语言,如C++, Python, Java等。它提供了大量的预定义函数,用于图像处理、特征检测、物体识别、机器学习等多个方面。 2. **编译环境**: 使用Visual Studio ...

    采用异步方式进行的验证码检验

    - **img.jsp**:此文件可能是生成验证码图像的Java服务器页面,它可能会生成随机字符并将其转化为图像输出。 - **random.jsp**:可能用于生成随机数,这些随机数可以作为验证码的一部分,确保每次请求的验证码都是...

    chrome 浏览器调用 ocx 插件资源

    根据描述中的链接(http://blog.csdn.net/wangchao1988ok/article/details/45193489),开发者或用户可以找到详细的步骤和示例来了解如何在Chrome中设置和使用这些资源。这通常包括安装必要的程序,将OCX控件注册到...

    几种经典的排序算法java实现

    并用java实现。代码拿去即可用,不需做任何修改! 部分内容: /** * 快排:O(n*logn);如果是从小到大排序; * 思想:选一个关键数据,将数组分成以关键数据分割的独立两个子数组;比关键数据小的在左边,大的在...

    Android路由器-Android开发

    MRouter模块化组件。 Gradle将mrouter-plugin作为依赖项添加到项目根目录中的主build.gradle中:...Apply插件:'im.wangchao.mrouter'... android {... defaultConfig {... javaCompileOptions {注解ProcessorOpti

    ROS2学习笔记之创建自己的功能包

    ROS2学习笔记之创建自己的功能包背景前期准备学习内容1. 创建一个包2. 编译新建的包3 Source工作空间的配置文件4 使用新建的包5. 查看包的内容6. 自定义 package.xml总结 学习目标: 使用CMake或Python创建一个新的包...

    一个解数独的程序

    描述中提到的“博文链接:https://lc-wangchao.iteye.com/blog/652165”是一个IT Eye博客上的文章链接,该文章可能详细介绍了这个解数独程序的设计思路、实现方法以及可能涉及的技术。由于链接无法直接访问,我们将...

    JavaScript实用小函数(三)

    通过这篇博客(博文链接:https://wangchao-0625.iteye.com/blog/338673),我们可以学习到更多关于JavaScript实用函数的技巧。 首先,我们注意到标签中有"源码"和"工具",这暗示我们将要讨论的可能是用于处理日期...

    webview调取相机

    ```java public class MyJavaScriptInterface { @JavascriptInterface @android.webkit.JavascriptInterface public void openCamera() { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ...

    NAPI实现nodejs音频转换MP3到WAV,源码+编译好的.node直接用

    在Node.js环境中,进行音频格式转换是一个常见的需求。本篇将深入探讨如何使用NAPI(Native Abstractions for Node.js)实现MP3到WAV的转换,以及如何利用编译好的.node动态库直接在项目中使用。...

Global site tag (gtag.js) - Google Analytics