`
1028826685
  • 浏览: 940591 次
  • 性别: 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));
}

}
分享到:
评论

相关推荐

    加密解密字符串的例子

    这个压缩包文件中的"加密解密字符串的例子"很可能是提供了一个关于如何在编程中实现字符串加密和解密的示例。接下来,我们将深入探讨加密解密的基础知识以及可能涉及的技术。 1. 加密解密原理: 加密是将明文(可...

    c++字符串加密解密

    对于初学者,这个项目提供了一个很好的DEs加密解密实践案例,可以学习如何在C++中调用加密库,理解加密解密的基本流程,以及如何在VS2017环境下构建和运行程序。 8. **安全性考虑**: 虽然DES在历史上被广泛使用...

    c#版字符串DES加密解密工具源码

    总的来说,这个C#版的字符串DES加密解密工具源码是一个很好的学习资源,可以帮助开发者深入理解加密和解密的原理,以及如何在实际项目中应用这些技术。在实际开发中,结合最新的加密标准和最佳实践,可以确保数据的...

    一套简单实用的字符串加密解密Demo(含源码)

    总之,这套"简单实用的字符串加密解密Demo"是一个很好的学习和实践平台,它可以帮助开发者了解加密解密的基本概念,同时提供了一种在实际项目中快速实现数据加密的途径。不过,对于专业级别的数据安全,还需要结合更...

    字符串加密解密工具

    本资源提供了一个名为"字符串加密工具Encrypt String.exe"的应用程序,可以用于实践和学习字符串加密解密的技术。 字符串加密通常分为对称加密和非对称加密两种主要类型。对称加密算法使用同一个密钥进行加密和解密...

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

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

    又一个加密/解密字符串的例子(3KB)...

    在VB中实现加密解密字符串,通常会涉及到以下几个步骤: 1. 导入必要的加密库:VB可能需要导入如`Microsoft.CryptoAPI`这样的库来访问加密功能。 2. 选择合适的加密算法:根据需求选择合适的加密算法,例如AES,...

    java_code.rar_java 加密解密_java_code.rar_加密解密_字符串 加密 解密_对 字符串 加密 解密

    本项目“java_code.rar”聚焦于Java实现的字符串加密解密技术,旨在提供一个实用的解决方案来保护敏感信息。 首先,我们需要理解加密和解密的基本概念。加密是将明文(可读信息)转化为密文(不可读信息)的过程,...

    字符串中文加密解密软件(含源代码)

    总之,这个VB字符串加密解密软件及其源代码是一个很好的学习资源,不仅能够帮助你理解加密技术,还能加深对VB编程的理解。在探索过程中,你可能会遇到一些挑战,但克服它们将使你的技能更上一层楼。

    字符串加密解密jar包

    "字符串加密解密jar包"是一个专门为处理字符串加密和解密任务而设计的Java应用程序集(jar包)。它允许用户对给定的字符串进行加密和解密操作,确保数据在存储或传输过程中的安全性。以下是对这个jar包及其相关知识...

    字符串解密大作业

    在IT领域,字符串处理是一项基础且重要的技能,广泛应用于各种软件开发中,包括但不限于数据分析、密码学、文本解析等。...对于IT专业学生来说,这是一个很好的实践机会,能够加深对字符串处理、密码学以及编程的理解。

    字符串加密和解密Demo

    在"字符串加密解密Demo"中,很可能包含的是一个简单的加密解密程序示例,可能涉及上述的某些加密算法和方法。通过查看提供的压缩包文件,我们可以学习如何在实际代码中实现加密和解密功能,从而更好地理解这一过程。...

    经典的MD5字符串加密VC 6.0源码.rar

    3. **窗体界面**:描述中提到的是一个Winform窗体版,这意味着源码会包含一个用户界面,用户可以输入字符串并触发加密和解密操作。窗体可能会包含文本框用于输入和显示字符串,按钮触发加密和解密过程,以及可能的...

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

    总的来说,"tea_test.rar"文件中的内容可能是一个学习和测试TEA加密算法的好资源,对于理解加密算法的工作原理和实现有很高的价值。然而,为了保证数据安全,开发者应始终关注最新的加密技术和最佳实践,以应对日益...

    C++字符串加密与解密

    这个头文件可能定义了一个类(例如`CryptString`),提供了加密和解密的方法,或者包含了一些静态函数来处理字符串的加密解密操作。 在C++中,实现字符串加密通常会用到以下几种方法: 1. **异或(XOR)加密**:这是...

    风吟PHP 字符串加密/解密.rar

    "风吟PHP 字符串加密/解密.rar"这个压缩包文件显然包含了一种或多种用于加密和解密字符串的PHP实现。这种加密技术强调了“有密钥,很安全,没有密钥解不了”,这表明它可能采用了对称加密算法,如AES(高级加密标准...

    vb2005 字符串加密解密

    在VB2005中,字符串加密和解密是安全编程的重要组成部分,它涉及到数据保护,尤其是当处理敏感信息时。本教程将深入探讨如何在VB2005环境中...提供的源代码是一个很好的起点,可以帮助初学者理解并掌握这些概念和技术。

    加密/解密字符串的例子(2KB)...

    这个压缩包提供的"加密/解密字符串的例子"是一个很好的学习资源,包含了源代码文件,可以帮助我们理解并实现基本的加密解密功能。 首先,`modCrypt.bas`是一个标准模块文件,它通常包含一系列的公共函数和子程序,...

    BASE64加密解密

    综上所述,BASE64加密解密在Java开发中是一个实用的技术,它允许开发者轻松地在二进制数据和ASCII字符串之间转换,便于数据的网络传输和存储。同时,Java提供的`Base64`工具类提供了便捷的API来实现这一功能,简化了...

Global site tag (gtag.js) - Google Analytics