首先引入bcprov-ext-jdk14-140.jar这个包,可以从http://www.bouncycastle.org上下载,下面是代码
/**
* 加密工具类
*/
package net.risesoft.platform.util;
import org.bouncycastle.crypto.BlockCipher;
import org.bouncycastle.crypto.CryptoException;
import org.bouncycastle.crypto.engines.IDEAEngine;
import org.bouncycastle.crypto.modes.CBCBlockCipher;
import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.util.encoders.Hex;
/**
* 加密工具类
*
* @author xiaosong
*
*/
public class IDEAEncrypt
{
private PaddedBufferedBlockCipher cipher = null;
/**
* 密钥的长度
*/
private int keylength;
/**
* 设置Block Cipher的加密引擎, 如IDEA_Engine
*
* @param block_cipher_engine
* 加密引擎
*/
public void setEngine(BlockCipher block_cipher_engine)
{
/*
* Setup the DESede cipher engine, create a PaddedBufferedBlockCipher in
* CBC mode.
*/
cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(
block_cipher_engine));
}
/**
* 设置Block Cipher的密钥长度
*
* @param length
*/
public void setKeyLength(int length)
{
this.keylength = length;
}
/**
* 设置密钥
*
* @param encrypt
* 加密还是解密
* @param keyStr
* 密钥字符串
*/
public void init(boolean encrypt, String keyStr)
{
/**
* 初始化密钥
*/
byte[] keybyte = new byte[this.keylength];
keybyte = Hex.decode(keyStr);// 将密钥加密
/**
* encrypt = true 加密 encrypt = false 解密
*/
cipher.init(encrypt, new KeyParameter(keybyte));
}
/**
* 加密
*
* @param 要加密的字符串
* @return 加密后的密文
*/
public String Encrypt(String mingwen)
{
byte[] inblock = mingwen.getBytes();
byte[] outblock = new byte[cipher.getOutputSize(inblock.length)];
int outL;
String s1 = "";
outL = cipher.processBytes(inblock, 0, inblock.length, outblock, 0);
try
{
outL = cipher.doFinal(outblock, outL);
} catch (CryptoException ce)
{
ce.printStackTrace();
}
byte[] result = Hex.encode(outblock);
s1 = new String(result).trim();
return s1;
}
/**
* 解密
* @param miwen 密文
* @return 明文
*/
public String Decrypt(String miwen)
{
byte[] inblock = null;
byte[] outblock = null;
String s1 = "";
int outL;
inblock = Hex.decode(miwen);
outblock = new byte[cipher.getOutputSize(inblock.length)];
outL = cipher.processBytes(inblock, 0, inblock.length, outblock, 0);
try
{
outL = cipher.doFinal(outblock, outL);
s1 = new String(outblock).trim();
} catch (CryptoException ce)
{
ce.printStackTrace();
}
return s1;
}
public static void main(String[] args)
{
IDEAEncrypt cipherTool = new IDEAEncrypt();
cipherTool.setEngine(new IDEAEngine());
cipherTool.setKeyLength(128);
String keyStr = "838jf84fr8jfdfrgrdgdfg";
cipherTool.init(true, keyStr);
String miwen = cipherTool.Encrypt("1234567890");
System.out.println(miwen);
cipherTool.init(false, keyStr);
System.out.println(cipherTool.Decrypt(miwen));
}
}
相关推荐
在Java中,对字符串进行加密和解密是软件开发中常见的需求,特别是在处理敏感信息时,如用户密码或网络传输的数据。这篇文档介绍了如何利用Java的加密库来实现这一目标。 首先,我们要理解密码学的基本概念。密码学...
java实现md5 加密解密(在网络中MD5是著名的不可逆算法,但是如果知道MD5的加密的字符串 则可以通过自己的加密算法对明文进行加密,对加密后的密文与字符串匹配; 匹配成功,表示找到明文;但是此程序的时间耗费较高!仅...
本文将详细介绍几种常见的字符串加密方法及其应用特点,并重点探讨Java AES加密算法的工作原理和实现步骤。 #### 二、常见字符串加密方法及其特点 1. **异或加密(XOR Encryption)** - **原理**:将字符串中的每...
在java中或是在jsp中实现对字符串的加密。
在Java中实现AES128加密解密,通常会使用Java Cryptography Extension (JCE) 提供的API。AES支持三种工作模式:ECB(Electronic Codebook)、CBC(Cipher Block Chaining)和CFB(Cipher Feedback)。其中,ECB是最...
在Java中实现RSA加密,需要使用`java.security`包下的类,如`KeyPairGenerator`用于生成密钥对,`Cipher`用于执行加密和解密操作,以及`KeyPair`用于存储公钥和私钥。以下是一个简单的RSA加密和解密流程: 1. 密钥...
在上述示例中,我们展示了如何对字符串进行Base64编码和解码。但是,实际应用中,你可能需要对二进制数据(如图片或文件)进行编码。这时,只需将二进制数据的字节数组传递给编码方法即可。 至于标签"工具",在开发...
IDEADemo: 演示了如何使用IDEA加密算法进行加密和解密,包括密钥生成和转换。 MD5Demo: 提供了一个MD5哈希算法的实现,展示了如何计算字符串的MD5值。 RSADemo: 展示了RSA非对称加密算法的使用,包括密钥生成、...
1. 字节码混淆:混淆技术通过重命名类、方法和变量,使用无意义的字符串,使得反编译后的代码难以阅读和理解。例如,ProGuard和Zelix KlassMaster等混淆工具就是常用的选择。 2. 字节码注入:在原始字节码的基础上...
最后,使用Base64编码将加密后的字节数组转换为可打印的字符串。解密过程则相反,先对Base64解码,然后进行解密操作。 在IDEA项目中,`pom.xml`文件是Maven项目的配置文件,它定义了项目依赖、构建目标等信息。在这...
在这个例子中,我们首先生成了一个2048位的RSA密钥对,然后使用公钥对字符串进行加密,再使用私钥进行解密,确保信息的安全性。请注意,实际应用中,公钥通常用于加密,而私钥用于解密,以保护信息不被未经授权的...
在Java中,哈希算法的标识通常是字符串形式,如"MD5"、"SHA-1"等。这些标识符可以在`MessageDigest`类的`getInstance()`方法中使用,以指定要使用的哈希算法。获取算法标识的常见方式是查阅相关的API文档或标准定义...
1. **字符串处理**:解密过程可能涉及对字符串进行操作,如查找和替换特定字符、反转字符串或者使用编码转换。 2. **算法理解与实现**:Mapabc的解密算法需要被理解和实现。这可能包括了解密规则,如置换密码、凯撒...
本项目名为"Playfair_playfairjava_",表明它是一个用Java语言编写的Playfair算法实现,适配于IntelliJ IDEA集成开发环境。 Playfair算法的核心原理是通过5x5矩阵对字母进行编码,以此来进行加密和解密。首先,我们...
在VS2005中实现这些算法,你需要理解它们的基本原理,然后编写相应的C++代码,可能涉及到位操作、字符串处理和数学运算。每个算法的加密和解密过程都需要实现,并确保在编译时没有错误。此外,理解这些算法的安全性...
### Playfair 加密算法的 Java 实现解析 #### 一、Playfair 加密算法简介 Playfair 加密算法是一种双字母替换密码,由英国人查尔斯·惠斯顿于 1854 年发明,后经苏格兰人列昂纳德·莫尔斯改进并推广。这种加密方式...
在Java中,除了Apache Commons Codec之外,还可以使用Java内置的`java.security.MessageDigest`类来实现MD5加密,例如: ```java import java.security.MessageDigest; import java.security....
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入数据转换成固定长度的输出,通常是32位的16进制表示的字符串。在Java中,MD5加密主要通过`java.security.MessageDigest`类来...
2. 字符串加密:Allatori能够将字符串常量加密,使得在内存中查找敏感信息变得更加困难。这样,即使有人尝试通过调试器查看程序运行时的字符串,也只会看到加密后的数据。 3. 控制流混淆:通过对代码结构进行重组,...