`

java版3des加密程序,可与php兼容

    博客分类:
  • java
阅读更多
代码:

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#兼容

    PHP 3des 对称加密解密,与 java c#兼容

    Qt DES_ECB加密解密类

    DES(Data Encryption Standard)是一种古老的对称加密算法,虽然现在已被更强大的AES(Advanced Encryption Standard)所取代,但它在某些场景下仍然有其应用价值,特别是在兼容性或性能要求较低的场合。...

    php中3des加密代码(完全与.net中的兼容)

    本文将详细讲解PHP中3DES加密代码,以及它如何与.NET环境下的3DES加密实现兼容。 3DES(Triple Data Encryption Standard),即三重数据加密标准,是一种加强版的DES加密算法。它通过对数据进行三次DES加密来提高...

    易语言-易语言3DES加解密

    在这里,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),则使用...

    Delphi的加解密封装单元 - Cryptography (目前只支持AES/DES/MD5)

    Cryptography单元提供DES支持意味着开发者可以为那些仍需使用DES加密的系统提供兼容性。 **MD5(Message-Digest Algorithm 5)**是一种广泛使用的哈希函数,可以将任意长度的数据转化为固定长度的摘要。尽管MD5的...

    易语言3DES加解密-易语言

    易语言3DES加解密是将Java的3DES加密算法集成到易语言中,以便于在易语言程序中实现安全的数据交互。3DES(Triple Data Encryption Algorithm)是一种加强版的DES(Data Encryption Standard)加密算法,它通过三次...

    利用PHP实现数据的加密及解密.pdf

    3. **兼容性和标准问题**:不同环境下的PHP版本和扩展库支持可能存在差异,导致兼容性问题。 #### 解决方案 为了克服这些局限性,可以采取以下措施: - **结合使用SSL/TLS**:通过HTTPS协议传输数据,可以在传输...

    QT字符串加密解密源码,我还有相同加密方法的php、C#、QT、golang、java版本

    本资源提供了在QT环境下实现的加密解密功能,并且兼容其他多种编程语言,如PHP、C#、Java和Golang,这为在不同语言之间进行安全的socket通信提供了便利。 QT是一个强大的C++库,它提供了丰富的图形用户界面(GUI)...

    oos.zip_oos _php 加密_php解密

    mcrypt已被弃用,但仍然在许多旧项目中使用,它支持多种加密算法,如DES、3DES、AES等。openssl扩展则更现代,提供了更多的加密和哈希算法,且与OpenSSL库兼容,增强了安全性。 在C语言中实现PHP加密解密,通常是...

    易语言PHP加密模块源码.7z

    将易语言与PHP结合,构建的加密模块可以充分利用两者的优势,为PHP应用程序的数据安全提供有力保障。 加密模块的主要任务是对数据进行编码,使其在传输或存储过程中难以被破解。在PHP中,常见的加密方法有MD5、SHA...

    JAVA上百实例源码以及开源项目源代码

    Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...

    encrypt:FoundPHP框架下采用PHP开发的加密类,支持PHP5PHP7PHP8等多版本

    在PHP5中,加密类可能基于mcrypt库实现,提供了块加密、流加密等多种加密算法,如AES、DES、TripleDES等。而在PHP7及以上版本,由于mcrypt的退役,加密类可能转向使用openssl扩展,它提供了更安全、更现代的加密算法...

    php-5.1.2-Win32 php-5.1.2-Win32

    - **libmcrypt.dll**:提供了Mcrypt扩展,这是一个强大的加密库,支持多种加密算法,如AES、DES、3DES等,为PHP提供丰富的加密功能。 - **gd库相关组件**(未在列表中,但通常在PHP安装中出现):GD库是PHP处理...

    php5.2 win32版

    5. **libmcrypt.dll**:这是Mcrypt库的DLL文件,提供各种加密算法的支持,如DES、3DES、AES等。在PHP中,可以使用mcrypt扩展进行数据加密。 6. **fdftk.dll**:这个文件通常与PDF处理有关,可能代表一个PDF库或工具...

    php-5.1.4-Win32

    9. `libmcrypt.dll`:这是Mcrypt库的一部分,提供各种加密算法,如DES, 3DES, AES等,用于PHP的加密操作。 总结来说,这个压缩包包含了一个PHP 5.1.4的Windows版本,以及一系列必要的依赖库,用于在Windows上搭建...

    NT系列加密狗产品选型表

    - **安全防护**:所有型号均支持3DES加密标准,并且部分型号还支持MD5加密算法及通信加密技术,确保数据传输过程中的安全性。 - **多用户支持**:除了NT101型号仅支持单用户外,其余型号均支持双用户或更多用户数,...

    mcrypt 2.5.7 扩展及php 5.6.27 源码包.zip

    而Mcrypt库则是一个强大的加密和解密工具,它为PHP提供了多种加密算法,包括DES、3DES、AES等。Mcrypt 2.5.7是这个扩展的一个稳定版本,被许多开发者用来确保数据的安全性。 在PHP 5.6.27这个版本中,Mcrypt扩展是...

    php-5.2.3-Win32.zip

    9. **libmcrypt.dll**:这是Mcrypt库的组件,提供了多种加密算法,如DES、3DES、AES等。在PHP中,Mcrypt扩展用于加密和解密数据。 总结起来,这个"php-5.2.3-Win32.zip"压缩包包含了运行PHP 5.2.3版本在Windows环境...

    Appserv中不能加载php_mcrypt.dll的解决方法

    Mcrypt是PHP的一个加密库,提供了多种加密算法和模式,如AES、DES、Blowfish等,对于处理敏感数据或实现安全通信至关重要。然而,从PHP 7.2版本开始,Mcrypt已经被弃用,建议使用更现代且安全的OpenSSL扩展来替代。 ...

Global site tag (gtag.js) - Google Analytics