AES在linux加密String,aes加密在linux下会生成随机key的解决办法

直接贴代码了:

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环境下试了一下,确实可以,搞定!Linux下无法生成core文件的解决办法

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

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

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

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

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

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

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

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

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

kali linux下运行&period;sh文件权限不够解决办法

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

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

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

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

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

随机推荐

背水一战 Windows 10 &lpar;23&rpar; - MVVM&colon; 通过 Binding 或 x&colon;Bind 结合 Command 实现,通过 ButtonBase 触发命令

[源码下载] 背水一战 Windows 10 (23) - MVVM: 通过 Binding 或 x:Bind 结合 Command 实现,通过 ButtonBase 触发命令 作者:webabcd ...

ios 关于状态栏的一些小知识

一.改变状态栏颜色 状态栏分为两种颜色,默认的是黑色,这里想要改为白色: 分为两步: 第一步:在项目中找到plist文件,添加View controller-based status bar appe ...

Python-变量

1.Python的变量是什么 变量是用来存储计算机程序中的信息,唯一的目的是将数据存储在内存中. 2.Python变量的组成 变量由字母.数字.下划线组成: 变量的第一位不能是数字,可以是字母或下划线 ...

hadoop学习记录(一)HDFS

hadoop的灵感源于谷歌,最初目的是解决传统数据库处理数据成本高和速度慢的问题. hadoop两个核心项目是HDFS(hadoop分布式文件系统)和MapReduce. HDFS用来实现数据的存储, ...

Java native&lpar;转&rpar;

Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能. 可以将 ...

Openjudge-NOI题库-数根

题目描述 Description 数根可以通过把一个数的各个位上的数字加起来得到.如果得到的数是一位数,那么这个数就是数根.如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来.如此进行下去, ...

Scrapy实践----获取天气信息

scrapy是一个非常好用的爬虫框架,它是基于Twisted开发的,Twisted又是一个异步网络框架,既然它是异步的,那么执行起来肯定会很快,所以scrapy的执行速度也不会慢的! 如果你还没没有学 ...

D盾 v2&period;0&period;6&period;42 测试记录

0x01 前言 之前发了一篇博客,D哥第一时间联系我,对问题进行修复.这段时间与D哥聊了挺多关于D盾这款产品的话题,实在是很佩服 ...

python 之 list&comma;tuple&comma;dict&comma;set

基本类型,  其中set好像提到的很少 list : []  根据字面, 是一个列表,  所以有序, 可以通过序号方位 tuple: ()  是不变的list, 通过序号访问 dict: {},  字 ...

&OpenCurlyDoubleQuote;全栈2019”Java第四十一章:static关键字

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值