`

java中DES加密解密例子

阅读更多

最近在学习一些关于加密解密的东西,在网上看到很多关于DES的介绍,感觉很抽象。后来找到一个实例,看了些代码后,能明白个基本。要学习的相关类:javax.crypto .Cipherjava.security.Security
例子代码如下:
import java.security.*;
import javax.crypto.*;

public class DESPlus {
    private static String strDefaultKey = "national";
    private Cipher encryptCipher = null;
    private Cipher decryptCipher = null;
    /**
     * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]
     * hexStr2ByteArr(String strIn) 互为可逆的转换过程
     *
     * @param arrB
     *            需要转换的byte数组
     * @return 转换后的字符串
     * @throws Exception
     *             本方法不处理任何异常,所有异常全部抛出
     */
    public static String byteArr2HexStr(byte[] arrB) {
        int iLen = arrB.length;
        // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
        StringBuffer sb = new StringBuffer(iLen * 2);
        for (int i = 0; i < iLen; i++) {
            int intTmp = arrB[i];
            // 把负数转换为正数
            while (intTmp < 0) {
                intTmp = intTmp + 256;
            }
            // 小于0F的数需要在前面补0
            if (intTmp < 16) {
                sb.append("0");
            }
            sb.append(Integer.toString(intTmp, 16));
        }
        return sb.toString();
    }

    /**
     * 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)
     * 互为可逆的转换过程
     *
     * @param strIn
     *            需要转换的字符串
     * @return 转换后的byte数组
     */
    public static byte[] hexStr2ByteArr(String strIn) {
        byte[] arrB = strIn.getBytes();
        int iLen = arrB.length;
        // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
        byte[] arrOut = new byte[iLen / 2];
        for (int i = 0; i < iLen; i = i + 2) {
            String strTmp = new String(arrB, i, 2);
            arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
        }
        return arrOut;
    }

    /**
     * 默认构造方法,使用默认密钥
     *
     * @throws Exception
     */
    public DESPlus() throws Exception {
        this(strDefaultKey);
    }

    /**
     * 指定密钥构造方法
     *
     * @param strKey
     *            指定的密钥
     * @throws Exception
     */
    public DESPlus(String strKey) {
        Security.addProvider(new com.sun.crypto.provider.SunJCE());
        Key key;
        try {
            key = getKey(strKey.getBytes());
            encryptCipher = Cipher.getInstance("DES");
            encryptCipher.init(Cipher.ENCRYPT_MODE, key);
            decryptCipher = Cipher.getInstance("DES");
            decryptCipher.init(Cipher.DECRYPT_MODE, key);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 加密字节数组
     */
    public byte[] encrypt(byte[] arrB){
        byte[] s = null ;
        try {
            s = encryptCipher.doFinal(arrB);
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return s ;
    }

    /**
     * 将启动码strIn加密,返回加密后的启动码
     */
    public String encrypt(String strIn) {
        return byteArr2HexStr(encrypt(strIn.getBytes()));
    }

    /**
     * 解密字节数组
     */
    public byte[] decrypt(byte[] arrB)  {
        byte[] s = null ;
        try {
            s = decryptCipher.doFinal(arrB);
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return s ;
    }
    /**
     * 解密 strIn
     */
    public String decrypt(String strIn){
        return new String(decrypt(hexStr2ByteArr(strIn)));
    }
    /**
     * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位
     *
     * @param arrBTmp
     *            构成该字符串的字节数组
     * @return 生成的密钥
     * @throws java.lang.Exception
     */
    private Key getKey(byte[] arrBTmp) {
        // 创建一个空的8位字节数组(默认值为0)
        byte[] arrB = new byte[8];
        // 将原始字节数组转换为8位
        for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
            arrB[i] = arrBTmp[i];
        }
        // 生成密钥
        Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");
        return key;
    }
}

测试类如下:Test1.java
public class Test1 {
 public static void main(String[] args) {
  try {
   String test = "启动码";
   DESPlus des = new DESPlus("2384722348");   //自定义密钥
   System.out.println("加密前的字符:"+test);
   System.out.println("加密后的字符:"+des.encrypt(test));
   System.out.println("解密后的字符:"+des.decrypt(des.encrypt(test)));
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
希望能给大家一点帮助。
在学习的时候,对于“ byte数组转换成十六进制值的字符串 ”这个不是很熟,所以还要加强字符串的操作。

分享到:
评论
1 楼 janrick 2014-05-21  
太感谢了,我正需要加密的函数呢

相关推荐

    Java版Des加密解密源码

    java版Des加密解密源码 DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件...

    JAVA实现3DES加密解密

    总的来说,通过Java实现3DES加密解密,我们需要理解加密算法的基本原理,熟悉Java的相关加密库,并掌握如何生成和使用密钥。在实际开发中,确保数据的安全性至关重要,因此正确地使用加密技术是每个IT专业人员必备的...

    java实现DES加密、解密算法

    本文将详细介绍如何在Java环境中实现DES加密和解密。 DES,全称为数据加密标准,基于Feistel密码结构,采用64位的密钥,但其中只有56位是真正参与加密过程的。DES分为两个主要阶段:加密和解密,这两个过程使用相同...

    3DES加密解密算法

    以下是关于3DES加密解密算法在Java中的实现细节: 首先,为了使用3DES,Java程序需要引入特定的JAR包,这些包通常位于`JAVA_HOME/jre/lib/`目录下,包括`jce.jar`、`US_export_policy.jar`、`local_policy.jar`以及...

    JAVA数据加密解密的实例

    在这个例子中,我们创建了一个`DESKeySpec`对象,然后通过`SecretKeyFactory`生成`SecretKey`。接着,我们初始化`Cipher`对象进行加密或解密操作。`Cipher.ENCRYPT_MODE`表示加密,`Cipher.DECRYPT_MODE`表示解密。...

    DES 加密 解密源码 java版 可运行

    本Java实现的DES加密解密源码提供了一个可运行的例子,这对于理解和学习DES的工作原理非常有帮助。源码中的注释清晰,使得开发者能够快速了解每一步操作的含义。 DES加密过程主要包括以下几个步骤: 1. **Key ...

    DES加密前端js和后台java互通代码

    DES(Data Encryption Standard)是一种...然而,这个例子展示了如何在JavaScript和Java之间使用DES加密实现数据的安全传输。确保在生产环境中遵循最佳实践,比如使用更强大的加密算法和更长的密钥,以及定期更新密钥。

    java使用des加密解密示例分享

    java使用des加密解密示例,适合java语言的所有平台,与.net等平台的加密解密兼容

    js&java DES加密互通

    为了实现JavaScript和Java之间的DES加密互通,前端发送加密后的数据到后端,后端解密后进行处理,然后再将加密的结果返回给前端。这个过程需要确保所有加密参数的一致性,包括密钥、模式、填充和编码方式。 通过...

    3des.zip_3DES加密解密_3des_3des java

    在Java中实现3DES加密解密,需要使用`javax.crypto`包中的`Cipher`类。以下是一个简单的3DES加密解密Java示例: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto....

    JAVA中3des加密算法

    在Java中实现3DES加密和解密涉及到以下几个关键点: 1. **密钥生成**:在Java中,你可以使用`java.security.KeyGenerator`类来生成3DES密钥。首先需要实例化一个`KeyGenerator`对象,然后调用`init()`方法初始化它...

    加密解密字符串的例子

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

    java中使用DES加密解密实例

    在Java编程语言中,数据加密标准(DES,...总之,这个Java实例展示了如何在应用程序中使用DES加密解密技术。不过,为了确保数据的安全,开发者应考虑使用更现代、更安全的加密算法,并遵循最佳实践来处理和存储密钥。

    java_des_crypto.rar_DES 加密 解密_doc_filedes_java cryp_java_des_c

    DES加密解密程序的主程序在 FileDES类中 运行时使用的例子是本目录下的111.doc文件,运行后自动生成222.doc文件和333.doc文件。 其中111.doc文件加密后的文件是222.doc文件,222.doc文件解密后文件是333.doc文件。...

    java字符串加密解密

    总的来说,Java字符串加密解密涉及到多个层面的知识,包括加密算法、密钥管理、安全协议等。理解和熟练掌握这些技术对于保障网络安全至关重要。在实际开发中,还需要关注加密算法的版本限制、密钥的安全存储以及法律...

    DES加密方法JAVA和C#交叉加密解密代码

    总之,理解和实现Java与C#之间的DES加密解密代码是跨平台数据安全的关键步骤。确保一致性、正确处理边界条件和异常,以及选择适当的加密模式和密钥管理策略,都是实现这一目标的关键因素。同时,随着技术的发展,...

    PHP、Java des加密解密实例

    以下是一个Java DES加密解密的例子: ```java import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class DESUtil { private final static String ALGORITHM = "DES"; public static ...

    DES加密算法(JAVA和C语言描述)结果一致

    标题"DES加密算法(JAVA和C语言描述)结果一致"表明我们将探讨如何在两种不同的编程语言——Java和C中实现DES加密,确保得到相同的加密结果。在跨语言实现加密算法时,一致性至关重要,因为这确保了无论在哪种环境下...

    java 加密解密 示例

    这个示例可能是一个简单的加密解密应用,基于提供的标签和文件名,我们可以推测它包含了一个名为`Demo.java`的源代码文件和一个可能是加密后生成的临时或结果文件`t.obj`。 `Demo.java`很可能包含了具体的加密和...

    des加密算法的JAVA 实现

    这个例子中,`Des算法JAVA的实现`文件可能包含了一个完整的Java程序,演示了上述步骤的代码实现。通过运行这个程序,你可以看到DES加密和解密的实际效果。然而,实际应用中,为了安全性,通常会使用更强大的加密算法...

Global site tag (gtag.js) - Google Analytics