直接贴代码了:

package com.segerp.tygl.weixin.common;

import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.security.SecureRandom; import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; /**
* 字符串加密解密类
* */
public class AesStrUtils { //private static final String SECRETKEY = "F0D7432CFDB62E21F8DF70CF47F06948";
private static final String SECRETKEY = "BB6D93B3BD1FB173DDADB78748E0C6D3"; public static void main(String[] args) throws Exception {
// 加密
String encryptResultStr = encryptStr("123", SECRETKEY);
System.out.println("加密后:" + encryptResultStr);
// 解密
String decryptResultStr = decryptStr(encryptResultStr, SECRETKEY);
System.out.println("解密后:" + decryptResultStr); } /**
* 字符串加密
*
* @param srcStr
* 加密字符串
* @param password
* 加密密钥
* */
public static String encryptStr(String srcStr, String password) {
byte[] encryptResult = encryptData_AES(srcStr, password);
String encryptResultStr = parseByte2HexStr(encryptResult);
return encryptResultStr;
} /**
* 字符串解密
*
* @param srcStr
* 解密字符串
* @param password
* 加密密钥
* */
public static String decryptStr(String srcStr, String password) {
String returnValue = "";
try {
byte[] decryptFrom = parseHexStr2Byte(srcStr);
byte[] decryptResult = decryptData_AES(decryptFrom, password);
returnValue = new String(decryptResult, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return returnValue;
} /**
* 将二进制转换成16进制
*
* @param buf
* @return
*/
private static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
} /**
* 加密
*
* @param content
* 需要加密的内容
* @param password
* 加密密码
* @return
*/
private static byte[] encryptData_AES(String content, String password) {
try {
//SecretKey secretKey = getKey(password);
//byte[] enCodeFormat = secretKey.getEncoded();
byte[] enCodeFormat = parseHexStr2Byte(password);
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return result; // 加密
} catch (Exception e) {
e.printStackTrace();
}
return null;
} /**
* 将16进制转换为二进制
*
* @param hexStr
* @return
*/
private static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length() / 2];
for (int i = 0; i < hexStr.length() / 2; i++) {
int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),
16);
result[i] = (byte) (high * 16 + low);
}
return result;
} /**
* 生成指定字符串的密钥
*
* @param secret 要生成密钥的字符
* @return secretKey 生成后的密钥
* @throws GeneralSecurityException
*/
private static SecretKey getKey(String secret) throws GeneralSecurityException {
try {
KeyGenerator _generator = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(secret.getBytes());
_generator.init(128,secureRandom);
return _generator.generateKey();
} catch (Exception e) {
throw new RuntimeException("初始化密钥出现异常");
}
} /**
* 解密
*
* @param content
* 待解密内容
* @param password
* 解密密钥
* @return
*/
private static byte[] decryptData_AES(byte[] content, String password) {
try {
//SecretKey secretKey = getKey(password);
//byte[] enCodeFormat = secretKey.getEncoded();
byte[] enCodeFormat = parseHexStr2Byte(password);
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(content);
return result; // 加密
} catch (Exception e) {
e.printStackTrace();
}
return null;
} }
getKey这个方法后来没有用了,因为网上提供的方法在linux下生成的种子还是会一直变
我就在想,反正要提供种子,不如在windows环境下,生成一个key,把生成的key做为种子,反正生成的key是不会变的
在linux环境下试了一下,确实可以,搞定!

aes加密在linux下会生成随机key的解决办法的更多相关文章

  1. Linux下无法生成core文件的解决办法

    1.检查ulimit [root ~]# ulimit -c 0 0:表示禁止生成core文件,此时需要执行ulimit -c unlimited(临时生效),或者在.bashrc中添加“ulimit ...

  2. linux下QT Creator常见错误及解决办法

    最近因为在做一个关于linux下计算机取证的小项目,需要写一个图形界面,所以想到了用QT来写,选用了linux下的集成开发环境QT Creator5.5.1,但刚刚安装好,竟然连一个"hel ...

  3. linux 下apche无法监听端口解决办法(Permission denied: make_sock: could not bind to address)

    想建立一个测试用的虚拟主机,遇到了这个问题:[root@localhost html]# service httpd startStarting httpd: httpd: Could not rel ...

  4. windows和linux下读取文件乱码的终极解决办法!

    乱码是个很恶心的问题. windows和linux读取txt文件,一旦读取了,编码发生改变,就无法再还原了,只有重启项目. 网上有很多方法都是读取文件头,方法很好,但是亲测都不能用(右移8位判断0xf ...

  5. linux下U盘文件只读的解决办法

    . 在终端运行如下命令 tail -f /var/log/syslog . 插入有只读文件系统故障的U盘 . 观察命令行输出 输出局部如下: Jul :: cslouis-pc kernel: [15 ...

  6. linux下tomcat启动很慢的解决办法

    1.用vim编辑器打开tomcat的bin目录下的catalina.sh [root@iz09a32x1sghz3z bin]# vi /usr/local/src/java/tomcats/tomc ...

  7. kali linux下运行.sh文件权限不够解决办法

    我要装一个生成免杀的神奇,系统提示权限不够 2 于是我想到了sudo,可还是不行 3 于是找到了方法 chmod   a+x   文件名 4 再运行一下,成功 5 有时有的方法很简答,只要你愿意找.

  8. linux下编译出现tmp空间不足解决办法

    编译的时候出现问题: fatal error: error writing to /tmp/ccHqgMoi.s: No space left on device 原因 : 系统 /tmp/空间不足, ...

  9. Linux下出现command not found的解决办法

    不管是普通用户还是ROOT用户,修改~/.bash_profile文件,在文件最后加上:export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/u ...

随机推荐

  1. Dictionary<TKey,TValue>

    /* * 先将 key 和 bucket 的长度一起,经过简单的 hash 算法计算出元素应该放在哪个 bucket . * 但是,元素并不是放在 bucket 里面的,bucket 只是对元素存放位 ...

  2. FastReport.Net使用:[29]调用存储过程1

    1.创建存储过程sp_querycourse,用于查询学生成绩. 2.在FastReport.Net报表设计器中,通过 数据-->添加数据源 来打开数据向导. 选择数据源,添加数据连接. 3.在 ...

  3. 【BZOJ 2711】 2711: [Violet 2]After 17 (0-1 背包)

    2711: [Violet 2]After 17 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 224  Solved: 153 Description ...

  4. 【BZOJ 3560】 3560: DZY Loves Math V (欧拉函数)

    3560: DZY Loves Math V Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 241  Solved: 133 Description ...

  5. WEB安全扫描器Netsparker推荐给大家

    Netsparker是一款综合型的web应用安全漏洞扫描工具,它分为专业版和免费版,免费版的功能也比较强大. Netsparker与其他综合 性的web应用安全扫描工具相比的一个特点是它能够更好的检测 ...

  6. Linux下Shell命令的输出信息同时显示在屏幕和保存到日志文件中

    #直接覆盖日志文件 ls -l | tee ./t.log #将输出内容附加到日志文件 ls -l | tee -a ./t.log 使用的是tee命令

  7. Extjs window组件 拖动统制

    Extjs window组件 拖动控制有时候一拖就拖出了浏览器,在想拖回来就不好办了: 解决办法:参考以下代码,在加载Ext核心库以后执行: Ext.override(Ext.Window, {    ...

  8. X86调用约定 calling convention

    http://zh.wikipedia.org/wiki/X86%E8%B0%83%E7%94%A8%E7%BA%A6%E5%AE%9A 这里描述了在x86芯片架构上的调用约定(calling con ...

  9. C# WebHelper-CookieHelper,CacheHelper,SessionHelper

    常用web操作工具类,记录一下,本文记录的工具类,都要求引用 System.Web 1.CookieHelper /// <summary> /// Cookie工具类 /// </ ...

  10. IOS开关效果

    有IOS的开关模拟,当然也有MIUI的开关模拟 看到设置选项里面的开关样式,突发奇想地来试试    最终效果如图: <!DOCTYPE html> <html> <hea ...