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开发中,我们通常使用位图图标(如ICO、PNG等格式),因为.NET Framework提供了丰富的支持。然而,矢量图标可以通过转换工具转换为位图格式,用于WinForm的应用。例如,我们可以使用在线工具或软件如...
《徐州汽车网》程序是由http//www.wangchao.it/在MediPro汽车门户网站系统的基础上改进而成的地方性汽车类整站程序。有新车报价、二手车、维修保养、汽车用品、汽车租赁、汽车培训、汽车资讯、商户名录等功能频道;...
-keep class im.wangchao.** { *; } -dontwarn im.wangchao.** -keep class **$$HttpBinder { *; } -keepclasseswithmembernames class * { @im.wangchao.* ; } -keepclasseswithmembernames class * { @im....
IE Tab 让Chrome兼容IE 在Chrome兼容IE 中组件的使用 https://blog.csdn.net/wangchao1988ok/article/details/45193489 使用方法
chrome参考示例调用ocx 适用于谷歌浏览器v45 版本以下 参考使用方法 https://blog.csdn.net/wangchao1988ok/article/details/45193489
7. **学习资源**:为了更好地利用Font Awesome,你可以参考官方文档(https://fontawesome.com/icons?d=gallery)查找图标代码,以及在CSDN博客(http://blog.csdn.net/wangchao712217/article/details/79192455)或...
NULL 博文链接:https://wangchao-17915566.iteye.com/blog/334582
采用URDF文件构建机器人的3D模型,采用gmapping包实现了机器人工作环境的地图构建,这一节将利用amcl包和move_base包实现移动机器人的自主导航。http://blog.csdn.net/wangchao7281/article/details/53691351
https://blog.csdn.net/wangchao712217/article/details/78728164 这个作者的源代码,但是他的编译不过,我修改过后了,现在是可以的,不缺少文件的。
MHttp 适用于Android Http的okhttp包装器。 Gradle: compile ' im.wangchao:mhttp:1.10.1 ' annotationProcessor ' im.wangchao:mhttp-compiler:0.5.2 ' 您可以使用... - keep class im .wangchao.** {
1. **OpenCV库**: OpenCV是一个跨平台的库,支持多种编程语言,如C++, Python, Java等。它提供了大量的预定义函数,用于图像处理、特征检测、物体识别、机器学习等多个方面。 2. **编译环境**: 使用Visual Studio ...
- **img.jsp**:此文件可能是生成验证码图像的Java服务器页面,它可能会生成随机字符并将其转化为图像输出。 - **random.jsp**:可能用于生成随机数,这些随机数可以作为验证码的一部分,确保每次请求的验证码都是...
根据描述中的链接(http://blog.csdn.net/wangchao1988ok/article/details/45193489),开发者或用户可以找到详细的步骤和示例来了解如何在Chrome中设置和使用这些资源。这通常包括安装必要的程序,将OCX控件注册到...
并用java实现。代码拿去即可用,不需做任何修改! 部分内容: /** * 快排:O(n*logn);如果是从小到大排序; * 思想:选一个关键数据,将数组分成以关键数据分割的独立两个子数组;比关键数据小的在左边,大的在...
MRouter模块化组件。 Gradle将mrouter-plugin作为依赖项添加到项目根目录中的主build.gradle中:...Apply插件:'im.wangchao.mrouter'... android {... defaultConfig {... javaCompileOptions {注解ProcessorOpti
ROS2学习笔记之创建自己的功能包背景前期准备学习内容1. 创建一个包2. 编译新建的包3 Source工作空间的配置文件4 使用新建的包5. 查看包的内容6. 自定义 package.xml总结 学习目标: 使用CMake或Python创建一个新的包...
描述中提到的“博文链接:https://lc-wangchao.iteye.com/blog/652165”是一个IT Eye博客上的文章链接,该文章可能详细介绍了这个解数独程序的设计思路、实现方法以及可能涉及的技术。由于链接无法直接访问,我们将...
通过这篇博客(博文链接:https://wangchao-0625.iteye.com/blog/338673),我们可以学习到更多关于JavaScript实用函数的技巧。 首先,我们注意到标签中有"源码"和"工具",这暗示我们将要讨论的可能是用于处理日期...
```java public class MyJavaScriptInterface { @JavascriptInterface @android.webkit.JavascriptInterface public void openCamera() { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ...
在Node.js环境中,进行音频格式转换是一个常见的需求。本篇将深入探讨如何使用NAPI(Native Abstractions for Node.js)实现MP3到WAV的转换,以及如何利用编译好的.node动态库直接在项目中使用。...