`

对内容进行加解密的实例

阅读更多
package com.yonge.messagedigest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

public class SecurityUtil {

    private final static String ENCRYPT_ALGORITHM    = "AES";

    private final static String SECRET_KEY_FILE_NAME = "secret.key";

    /**
     * 生成加解密的密钥
     * @param algorithm
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     */
    public static SecretKey generateSecretKey(String algorithm) throws NoSuchAlgorithmException,
                                                               IOException {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);
        SecretKey secretKey = keyGenerator.generateKey();
        //保存到文件中
        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        try {
            fos = new FileOutputStream(new File(SECRET_KEY_FILE_NAME));
            oos = new ObjectOutputStream(fos);
            oos.writeObject(secretKey);
        } finally {
            if (fos != null) {
                fos.close();
            }
            if (oos != null) {
                oos.close();
            }
        }

        return secretKey;
    }

    /**
     * 生成加解密的密钥
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     */
    public static SecretKey generateSecretKey() throws NoSuchAlgorithmException, IOException {
        return generateSecretKey(ENCRYPT_ALGORITHM);
    }

    /**
     * 加密内容,并返回
     * @param data
     * @param algorithm
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws NoSuchPaddingException
     * @throws InvalidKeyException
     * @throws IllegalBlockSizeException
     * @throws BadPaddingException
     */
    public static byte[] encrypt(byte[] data, String algorithm) throws NoSuchAlgorithmException,
                                                               IOException, ClassNotFoundException,
                                                               NoSuchPaddingException,
                                                               InvalidKeyException,
                                                               IllegalBlockSizeException,
                                                               BadPaddingException {
        SecretKey secretKey = getSecretKeyFromLocal();
        if (secretKey == null) {
            secretKey = generateSecretKey(algorithm);
        }
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        return cipher.doFinal(data);
    }

    /**
     * 加密内容,并返回
     * @param data
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws NoSuchPaddingException
     * @throws InvalidKeyException
     * @throws IllegalBlockSizeException
     * @throws BadPaddingException
     */
    public static byte[] encrypt(byte[] data) throws NoSuchAlgorithmException, IOException,
                                             ClassNotFoundException, NoSuchPaddingException,
                                             InvalidKeyException, IllegalBlockSizeException,
                                             BadPaddingException {
        return encrypt(data, ENCRYPT_ALGORITHM);
    }

    /**
     * 解密内容,并返回
     * @param data
     * @param algorithm
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws NoSuchPaddingException
     * @throws InvalidKeyException
     * @throws IllegalBlockSizeException
     * @throws BadPaddingException
     */
    public static byte[] decrypt(byte[] data, String algorithm) throws NoSuchAlgorithmException,
                                                               IOException, ClassNotFoundException,
                                                               NoSuchPaddingException,
                                                               InvalidKeyException,
                                                               IllegalBlockSizeException,
                                                               BadPaddingException {
        SecretKey secretKey = getSecretKeyFromLocal();
        if (secretKey == null) {
            secretKey = generateSecretKey(algorithm);
        }
        Cipher cipher = Cipher.getInstance(algorithm);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);

        return cipher.doFinal(data);
    }

    /**
     * 解密内容,并返回
     * @param data
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws ClassNotFoundException
     * @throws NoSuchPaddingException
     * @throws InvalidKeyException
     * @throws IllegalBlockSizeException
     * @throws BadPaddingException
     */
    public static byte[] decrypt(byte[] data) throws NoSuchAlgorithmException, IOException,
                                             ClassNotFoundException, NoSuchPaddingException,
                                             InvalidKeyException, IllegalBlockSizeException,
                                             BadPaddingException {
        return decrypt(data, ENCRYPT_ALGORITHM);
    }

    /**
     * 获取密钥对象
     * @return
     * @throws NoSuchAlgorithmException
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static SecretKey getSecretKeyFromLocal() throws NoSuchAlgorithmException, IOException,
                                                   ClassNotFoundException {
        FileInputStream fis = null;
        ObjectInputStream ois = null;
        SecretKey secretKey = null;
        try {
            //加载私钥文件
            fis = new FileInputStream(new File(SECRET_KEY_FILE_NAME));
            ois = new ObjectInputStream(fis);
            //读取对象
            secretKey = (SecretKey) ois.readObject();
        } finally {
            //关闭流
            if (fis != null) {
                fis.close();
            }
            if (ois != null) {
                ois.close();
            }
        }
        return secretKey;
    }

}

 

0
0
分享到:
评论

相关推荐

    RSA非对称加解密实例

    RSA非对称加密是一种广泛应用的公钥加密算法,由Ron Rivest、Adi Shamir和Leonard ...通过学习和理解"RSA非对称加解密实例"的源码,开发者可以更好地掌握加密解密技术,并将其应用到实际项目中,保障数据的安全传输。

    加密解密实例

    本文将基于"加密解密实例"这一主题,深入探讨相关的技术知识点。 首先,我们需要了解加密的基本概念。加密是一种将可读信息(明文)转换为不可读形式(密文)的过程,目的是防止未经授权的访问。这通常通过使用加密...

    文本加密解密实例

    这个"文本加密解密实例"很可能是提供了一个实际操作的代码示例,用于理解和应用加密技术。以下是对这个主题的详细解释: 文本加密是将可读的明文转化为无法理解的密文的过程,目的是保护数据不被未经授权的人访问。...

    JAVA数据加密解密的实例+Java源码

    本实例将介绍如何在Java中实现数据的加解密,提供相关的源代码示例。 Java提供了丰富的加密库,如Java Cryptography Extension (JCE) 和 Java Cryptography Architecture (JCA),它们包含了各种加密算法,如AES...

    C# MD5加密解密实例

    C# MD5加密解密实例,一个小程序,哈哈

    AES加解密实例

    AES加解密实例, 能够用于AES算法加密及解密

    QT做的DES加解密实例

    在这个“QT做的DES加解密实例”中,我们将深入探讨如何使用QT库来实现DES的加解密功能。 首先,我们需要理解DES的工作原理。DES是一种块加密算法,它将64位的数据块作为输入,并使用56位的密钥进行加密或解密。实际...

    asp.net加密解密实例

    - 自定义类通常会利用`System.Security.Cryptography`中的加密算法,如MD5,创建一个加密实例,然后对数据进行加解密操作。 5. **使用示例**: - 在ASP.NET应用程序中,可以通过实例化这个加密解密类,然后调用其...

    delphi异或加密解密实例

    本文将深入探讨Delphi中的异或(XOR)加密解密实例,以及如何在Delphi 7.0环境下实现这一功能。 异或加密是一种简单的对称加密方法,它基于异或运算的性质:相同的比特进行异或运算结果为0,不同的比特进行异或运算...

    RSA加密解密实例(源码)(内实现大数加密解密)

    RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是现代密码学的基石之一。...学习和分析这个实例可以加深对非对称加密的理解,为实际项目中的安全通信提供基础。

    RSA加密解密实例

    4. **解密**:接收方使用私钥d进行解密,计算m = c^d mod n。 **RSA的安全性**:RSA的安全性依赖于大数因子分解问题。如果攻击者能分解n得到p和q,他们就可以轻易地计算出d,从而获取私钥。然而,随着p和q的增长,...

    JAVA数据加密解密的实例

    总的来说,这个实例为我们展示了如何在Java中使用DES加密算法进行数据加密和解密。在实际开发中,为了增强安全性,开发者通常会转向更强大的加密算法(如AES),并结合安全的密钥管理和存储机制。同时,非对称加密和...

    DES加密解密实例网络安全传输系统

    在"DES加密解密实例网络安全传输系统"中,DES算法用于确保在网络上传输的数据不被未授权的第三方获取或篡改。数据在发送端使用DES加密,变为密文,然后通过网络发送到接收端。接收端接收到密文后,使用同样的DES密钥...

    Hash MD5 DES AES RSA加解密实例

    本文将详细讲解四种常见的加密算法:MD5、DES、AES和RSA,以及它们在实际应用中的加解密实例。 首先,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它可以将任意长度的数据转化为固定长度的摘要。...

    PHP中加密解密函数与DES加密解密实例_.docx

    PHP中加密解密函数与DES加密解密实例_.docx

    AES加解密前后端实例

    1. **JavaScript库**:如CryptoJS,它提供了AES加解密的功能,允许开发者在浏览器环境中进行加密操作。 2. **数据封装**:前端将需要加密的数据进行格式化,然后调用加密函数,生成密文。 3. **安全传输**:使用...

    兼容JS和C#的RSA加密解密实例

    在给定的"兼容JS和C#的RSA加密解密实例"中,我们关注的是如何在JavaScript(前端)和C#(后端)之间使用RSA进行安全的数据交换。这涉及到两个主要的方面:前端的加密和后端的解密。 前端部分,JavaScript通常用于...

    php rsa加密解密实例

    本实例将探讨如何在PHP中实现RSA加密和解密,同时也会提及OpenSSL的安装和使用,这对于在Windows环境中进行PHP开发至关重要。 首先,RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,它使用两个密钥:公钥和...

    JS源码 - Base64加密解密实例演示程序类

    在提供的"Base64加密解密.html"文件中,很可能包含了一个完整的JavaScript实例,演示了如何使用`btoa()`和`atob()`进行Base64的加密和解密操作。你可以打开这个HTML文件查看具体的代码示例和使用方法。而"李嘉的科研...

    Base64加密解密实例

    在Java中,我们可以使用`java.util.Base64`类进行Base64的加解密操作。这个类提供了`Encoder`和`Decoder`两个接口,分别用于编码和解码。下面我们将详细讲解如何使用这些工具进行Base64处理。 首先,我们来看`Base...

Global site tag (gtag.js) - Google Analytics