代码:
import java.io.UnsupportedEncodingException;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class DESCoder
{
private static BASE64Encoder base64 = new BASE64Encoder();
private static byte[] myIV = { 50, 51, 52, 53, 54, 55, 56, 57 };
//private static String strkey = "W9qPIzjaVGKUp7CKRk/qpCkg/SCMkQRu"; // 字节数必须是8的倍数
private static String strkey = "01234567890123456789012345678912";
public static String desEncrypt(String input) throws Exception
{
BASE64Decoder base64d = new BASE64Decoder();
DESedeKeySpec p8ksp = null;
p8ksp = new DESedeKeySpec(base64d.decodeBuffer(strkey));
Key key = null;
key = SecretKeyFactory.getInstance("DESede").generateSecret(p8ksp);
input = padding(input);
byte[] plainBytes = (byte[])null;
Cipher cipher = null;
byte[] cipherText = (byte[])null;
plainBytes = input.getBytes("UTF8");
cipher = Cipher.getInstance("DESede/CBC/NoPadding");
SecretKeySpec myKey = new SecretKeySpec(key.getEncoded(), "DESede");
IvParameterSpec ivspec = new IvParameterSpec(myIV);
cipher.init(1, myKey, ivspec);
cipherText = cipher.doFinal(plainBytes);
return removeBR(base64.encode(cipherText));
}
public static String desDecrypt(String cipherText) throws Exception
{
BASE64Decoder base64d = new BASE64Decoder();
DESedeKeySpec p8ksp = null;
p8ksp = new DESedeKeySpec(base64d.decodeBuffer(strkey));
Key key = null;
key = SecretKeyFactory.getInstance("DESede").generateSecret(p8ksp);
Cipher cipher = null;
byte[] inPut = base64d.decodeBuffer(cipherText);
cipher = Cipher.getInstance("DESede/CBC/NoPadding");
SecretKeySpec myKey = new SecretKeySpec(key.getEncoded(), "DESede");
IvParameterSpec ivspec = new IvParameterSpec(myIV);
cipher.init(2, myKey, ivspec);
byte[] output = removePadding(cipher.doFinal(inPut));
return new String(output, "UTF8");
}
private static String removeBR(String str) {
StringBuffer sf = new StringBuffer(str);
for (int i = 0; i < sf.length(); ++i)
{
if (sf.charAt(i) == '\n')
{
sf = sf.deleteCharAt(i);
}
}
for (int i = 0; i < sf.length(); ++i)
if (sf.charAt(i) == '\r')
{
sf = sf.deleteCharAt(i);
}
return sf.toString();
}
public static String padding(String str)
{
byte[] oldByteArray;
try
{
oldByteArray = str.getBytes("UTF8");
int numberToPad = 8 - oldByteArray.length % 8;
byte[] newByteArray = new byte[oldByteArray.length + numberToPad];
System.arraycopy(oldByteArray, 0, newByteArray, 0, oldByteArray.length);
for (int i = oldByteArray.length; i < newByteArray.length; ++i)
{
newByteArray[i] = 0;
}
return new String(newByteArray, "UTF8");
}
catch (UnsupportedEncodingException e)
{
System.out.println("Crypter.padding UnsupportedEncodingException");
}
return null;
}
public static byte[] removePadding(byte[] oldByteArray)
{
int numberPaded = 0;
for (int i = oldByteArray.length; i >= 0; --i)
{
if (oldByteArray[(i - 1)] != 0)
{
numberPaded = oldByteArray.length - i;
break;
}
}
byte[] newByteArray = new byte[oldByteArray.length - numberPaded];
System.arraycopy(oldByteArray, 0, newByteArray, 0, newByteArray.length);
return newByteArray;
}
public static void main(String args[])
{
try {
String desstr = DESCoder.desEncrypt("1qaz2ws");
String pstr = DESCoder.desDecrypt(desstr);
System.out.println("plainText:1qaz2ws");
System.out.println("Encode:"+desstr);
System.out.println("Decode:"+pstr);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
plainText:1qaz2ws
Encode:0GsXgYA8BuM=
Decode:1qaz2ws
和PHP的一样,呵呵。转载地址http://hi.baidu.com/farmerluo/blog/item/2d613a87ed0a782dc65cc397.html
分享到:
相关推荐
PHP 3des 对称加密解密,与 java c#兼容
DES(Data Encryption Standard)是一种古老的对称加密算法,虽然现在已被更强大的AES(Advanced Encryption Standard)所取代,但它在某些场景下仍然有其应用价值,特别是在兼容性或性能要求较低的场合。...
本文将详细讲解PHP中3DES加密代码,以及它如何与.NET环境下的3DES加密实现兼容。 3DES(Triple Data Encryption Standard),即三重数据加密标准,是一种加强版的DES加密算法。它通过对数据进行三次DES加密来提高...
在这里,Java编写的3DES加密解密模块被封装到JAR中,然后在易语言中通过调用Java的JNI(Java Native Interface)接口来使用这些功能。 JNI是Java平台提供的一种机制,它允许Java代码和其他语言写的代码进行交互。...
对称加密如AES(Advanced Encryption Standard)、DES(Data Encryption Standard)和3DES,使用同一密钥进行加密和解密,效率高但密钥管理较为复杂。非对称加密如RSA、ECC(Elliptic Curve Cryptography),则使用...
Cryptography单元提供DES支持意味着开发者可以为那些仍需使用DES加密的系统提供兼容性。 **MD5(Message-Digest Algorithm 5)**是一种广泛使用的哈希函数,可以将任意长度的数据转化为固定长度的摘要。尽管MD5的...
易语言3DES加解密是将Java的3DES加密算法集成到易语言中,以便于在易语言程序中实现安全的数据交互。3DES(Triple Data Encryption Algorithm)是一种加强版的DES(Data Encryption Standard)加密算法,它通过三次...
3. **兼容性和标准问题**:不同环境下的PHP版本和扩展库支持可能存在差异,导致兼容性问题。 #### 解决方案 为了克服这些局限性,可以采取以下措施: - **结合使用SSL/TLS**:通过HTTPS协议传输数据,可以在传输...
本资源提供了在QT环境下实现的加密解密功能,并且兼容其他多种编程语言,如PHP、C#、Java和Golang,这为在不同语言之间进行安全的socket通信提供了便利。 QT是一个强大的C++库,它提供了丰富的图形用户界面(GUI)...
mcrypt已被弃用,但仍然在许多旧项目中使用,它支持多种加密算法,如DES、3DES、AES等。openssl扩展则更现代,提供了更多的加密和哈希算法,且与OpenSSL库兼容,增强了安全性。 在C语言中实现PHP加密解密,通常是...
将易语言与PHP结合,构建的加密模块可以充分利用两者的优势,为PHP应用程序的数据安全提供有力保障。 加密模块的主要任务是对数据进行编码,使其在传输或存储过程中难以被破解。在PHP中,常见的加密方法有MD5、SHA...
Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
在PHP5中,加密类可能基于mcrypt库实现,提供了块加密、流加密等多种加密算法,如AES、DES、TripleDES等。而在PHP7及以上版本,由于mcrypt的退役,加密类可能转向使用openssl扩展,它提供了更安全、更现代的加密算法...
- **libmcrypt.dll**:提供了Mcrypt扩展,这是一个强大的加密库,支持多种加密算法,如AES、DES、3DES等,为PHP提供丰富的加密功能。 - **gd库相关组件**(未在列表中,但通常在PHP安装中出现):GD库是PHP处理...
5. **libmcrypt.dll**:这是Mcrypt库的DLL文件,提供各种加密算法的支持,如DES、3DES、AES等。在PHP中,可以使用mcrypt扩展进行数据加密。 6. **fdftk.dll**:这个文件通常与PDF处理有关,可能代表一个PDF库或工具...
9. `libmcrypt.dll`:这是Mcrypt库的一部分,提供各种加密算法,如DES, 3DES, AES等,用于PHP的加密操作。 总结来说,这个压缩包包含了一个PHP 5.1.4的Windows版本,以及一系列必要的依赖库,用于在Windows上搭建...
- **安全防护**:所有型号均支持3DES加密标准,并且部分型号还支持MD5加密算法及通信加密技术,确保数据传输过程中的安全性。 - **多用户支持**:除了NT101型号仅支持单用户外,其余型号均支持双用户或更多用户数,...
而Mcrypt库则是一个强大的加密和解密工具,它为PHP提供了多种加密算法,包括DES、3DES、AES等。Mcrypt 2.5.7是这个扩展的一个稳定版本,被许多开发者用来确保数据的安全性。 在PHP 5.6.27这个版本中,Mcrypt扩展是...
9. **libmcrypt.dll**:这是Mcrypt库的组件,提供了多种加密算法,如DES、3DES、AES等。在PHP中,Mcrypt扩展用于加密和解密数据。 总结起来,这个"php-5.2.3-Win32.zip"压缩包包含了运行PHP 5.2.3版本在Windows环境...
Mcrypt是PHP的一个加密库,提供了多种加密算法和模式,如AES、DES、Blowfish等,对于处理敏感数据或实现安全通信至关重要。然而,从PHP 7.2版本开始,Mcrypt已经被弃用,建议使用更现代且安全的OpenSSL扩展来替代。 ...