`
1028826685
  • 浏览: 920404 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类

一个很好的加密解密字符串

阅读更多
package net.sf.andhsli.hotspotlogin;

import java.security.SecureRandom;

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

/**
* Usage:
* <pre>
* String crypto = SimpleCrypto.encrypt(masterpassword, cleartext)
* ...
* String cleartext = SimpleCrypto.decrypt(masterpassword, crypto)
* </pre>
* @author ferenc.hechler
*/
public class SimpleCrypto {

public static String encrypt(String seed, String cleartext) throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] result = encrypt(rawKey, cleartext.getBytes());
return toHex(result);
}

public static String decrypt(String seed, String encrypted) throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] enc = toByte(encrypted);
byte[] result = decrypt(rawKey, enc);
return new String(result);
}

private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(128, sr); // 192 and 256 bits may not be available
SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}


private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}

private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}

public static String toHex(String txt) {
return toHex(txt.getBytes());
}
public static String fromHex(String hex) {
return new String(toByte(hex));
}

public static byte[] toByte(String hexString) {
int len = hexString.length()/2;
byte[] result = new byte[len];
for (int i = 0; i < len; i++)
result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
return result;
}

public static String toHex(byte[] buf) {
if (buf == null)
return "";
StringBuffer result = new StringBuffer(2*buf.length);
for (int i = 0; i < buf.length; i++) {
appendHex(result, buf[i]);
}
return result.toString();
}
private final static String HEX = "0123456789ABCDEF";
private static void appendHex(StringBuffer sb, byte b) {
sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
}

}
分享到:
评论

相关推荐

    AES加密解密VC++源代码,任意长度字符串和文件加解密

    AES 加密的代码网上有很多,但是90%都只能对 16位字符串进行加密,经过两天的研究,修改完善了这个 可以对任意字符长度的字符串进行加密的VC++源代码,这个是本人努力的成果,像大家收点费用,希望谅解。 OK 制作 ...

    字符串加密解密工具

    delphi 开发的简单字符串加密解密工具,单元可以直接使用到你的工程中,很好用,很方便。

    字符串加密解密jar包

    对字给定的字符串进行加密 解密 按照自己的格式 很好用 一般用于 数据库数据的简单加密

    tea_test.rar_tea_tea_test_加密 解密_加密解密_字符串 加密 解密

    tea加密算法实现及测试,该算法能很好地对字符串进行加密解密

    AES.rar_AES解密_aes string_aes 加密 解密_c++ AES_字符串 加密

    用于实现AES加密、解密,加密128bits字符串,密码也是128bits。可扩展性很好,可以很容易地用于扩展成文件加密。

    c# 加密和解密相关代码

    //得到加密或解密字符串 } return EncodedText; //返回加密或解密后的字符串 } 秘 笈心法 心法领悟573:如何在字符串中查找指定字符? 在字符串中查找指定字符时,可以先将字符串显示在richTextBox 控件中,然后...

    论文研究-面向云数据库服务的隐私字符串加密查询方案.pdf

    面向云数据库的字符串型隐私信息的加密查询问题,提出了一个有效解决方案。为了确保字符串数据在不可信云数据库中安全性,在客户端,首先对其进行加密并为其构建特征索引。特征索引通过子字段划分、子字段值域分区、...

    文件加密算法,主要用来加密文本文件,对字符串进行加密

    一个很好的文件加密算法,可以加密任何文本文件,并附带解密算法

    Java版数据加密解密jar包

    近期互联网上频频爆出网站数据库被脱裤,造成大量的敏感数据的失窃和丢失,给很多企业带来重大损失,本加密解密组件(jar包)可以帮助开发者,快速对应用中的敏感数据进行加密解密,尽可能的帮助开发人员提高应用的...

    Base64的加解密工具

    Base64的加解密工具,很好用,也很容易使用,可以快速的进行加密和解密字符串

    pbkdf2-simple-crypt:使用密码 (PBKDF2+aes-256-cbc+HMAC) 与字符串加密数据的简单实用程序

    一个简单的加密/解密库,它使用 PBKDF2 从密码中派生出密钥(同时生成安全随机盐),使用 aes-256-cbc 加密并返回一个字符串。 该字符串包括盐、iv、HMAC(hmac-sha1,作为 mac 很好)和密文。 所有这一切的结果是...

    C#.net中1个很好的Md5加密的类

    太棒了 创建getMd5方法以获得userPwd的Md5值 byte类型数组的值转换为 byte类型的Md5值 将byte类型的Md5值转换为字符串 返回Md5字符串

    C# 字符串处理小工具

    本文主要介绍C#字符串处理小工具,实现功能包括:转换为大写;转换为小写;反转字符串;匹配某字符串出现次数;正则匹配;...ROT13加密解密;MD5 32位加密。具有很好的参考价值。下面跟着小编一起来看下吧

    欧姆龙CQM1H C200H CPM系列PLC解密软件直读密码

    大家好: 我早期的帖子里首次公布了CQM1H等型号解密,由于...再一个就是 “Mscomm32.ocx”错误,这个你要是搞不定说明你从未搞过解密,是第一次, 还是点击一下看看这里吧! 文件;欧姆龙C系4位密码解密.rar (90.71 KB)

    web.net connstring加密程序

    这个注入好像是打开Min Pool Size=999999一个很大的值,来破坏数据库。 这个链接保护的方法最好是: Date Source=(local);Initial Catalog=Works;User ID=sa;Password="password01!;Pooling=true" 看到后面没有,...

    Javascript逆向分析+Cookie加密+补环境+逆向学习

    反混淆技术包括解码编码的字符串、还原混淆的变量名和函数名等,帮助我们更容易理解代码的逻辑和功能。 在进行 Cookie 加密时,常见的加密算法包括对称加密和非对称加密。对称加密使用相同的密钥进行加密和解密,而...

    最新软件狗时间复制工具

    为此,“蓝芯金盾加密锁”采用了源程序级加密,此方法不是去判断某个值、某个字符串或数据是否正确,而是时时变化输入参数,在任何时刻没有两个相同的数据出现。 自定义算法加密锁 现在市场上还提供一种开发者可...

    shiro安全管理框架之Cryptography.docx

    一般进行散列时最好提供一个salt(盐),比如加密密码“admin”,产生的散列值是“21232f297a57a5a743894a0e4a801fc3”,可以到一些md5解密网站很容易的通过散列值得到密码“admin”,即如果直接对密码进行散列相对...

    vc++ 应用源码包_1

    非常好的一个实例,把网络连接的UDP/TCP都插入到CList控件中显示出来。 VC++视频捕捉系统 win32下 视频操作。 VC++视频会议系统(完整)有开发文档。使用了系统自带的视频。 Windows核心编程(第五版)随书源代码 ...

    Java JDK1.7对字符串的BASE64编码解码方法

    今天小编就为大家分享一篇Java JDK1.7对字符串的BASE64编码解码方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics