Java对字符串进行加密解密

Java 对字符串进行加密解密攻略

简介

Java 中提供了多种加密解密的方案,涉及对称加密、非对称加密、哈希算法等等。本文将主要讲解在 Java 中对字符串进行加密解密的方法。

对称加密

对称加密是指加密和解密使用同一个密钥的方式,常见的有 AES、DES 等算法。

AES 加密

在 Java 中使用 AES 进行加密解密的主要步骤如下:

  1. 生成一个 AES 密钥,使用 SecretKeySpec 构造器指定密钥长度和加密算法类型。
  2. 获取一个 Cipher 对象,并指定加密模式、填充方式以及密钥。
  3. 调用 Cipher 对象的 encrypt/decrypt 方法,传入要加密/解密的数据,即可得到加密/解密后的数据。

下面是一个简单的 AES 加密示例:

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESEncryptor {

    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";
    private static final String CHARSET_NAME = "UTF-8";

    private SecretKeySpec key;

    public AESEncryptor(String secretKey) {
        key = new SecretKeySpec(secretKey.getBytes(), "AES");
    }

    public String encrypt(String data) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedData = cipher.doFinal(data.getBytes(CHARSET_NAME));
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    public String decrypt(String encryptedData) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedData, CHARSET_NAME);
    }
}

DES 加密

在 Java 中使用 DES 进行加密解密的主要步骤如下:

  1. 生成一个 DES 密钥,使用 SecretKeySpec 构造器指定密钥长度和加密算法类型。
  2. 获取一个 Cipher 对象,并指定加密模式、填充方式以及密钥。
  3. 调用 Cipher 对象的 encrypt/decrypt 方法,传入要加密/解密的数据,即可得到加密/解密后的数据。

下面是一个简单的 DES 加密示例:

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class DESEncryptor {

    private static final String TRANSFORMATION = "DES/ECB/PKCS5Padding";
    private static final String CHARSET_NAME = "UTF-8";

    private SecretKeySpec key;

    public DESEncryptor(String secretKey) {
        key = new SecretKeySpec(secretKey.getBytes(), "DES");
    }

    public String encrypt(String data) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedData = cipher.doFinal(data.getBytes(CHARSET_NAME));
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    public String decrypt(String encryptedData) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedData, CHARSET_NAME);
    }
}

非对称加密

非对称加密是指加密和解密使用不同密钥的方式,常见的有 RSA 等算法。

RSA 加密

在 Java 中使用 RSA 进行加密解密的主要步骤如下:

  1. 生成一个 RSA 密钥对。
  2. 获取一个 Cipher 对象,并指定加密模式、填充方式以及密钥对。
  3. 调用 Cipher 对象的 encrypt/decrypt 方法,传入要加密/解密的数据,即可得到加密/解密后的数据。

下面是一个简单的 RSA 加密示例:

import javax.crypto.Cipher;
import java.nio.charset.StandardCharsets;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Base64;

public class RSAEncryptor {

    private static final String ALGORITHM = "RSA";
    private static final String TRANSFORMATION = "RSA/ECB/PKCS1Padding";
    private static final String CHARSET_NAME = "UTF-8";

    private KeyPair keyPair;

    public RSAEncryptor() throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
        keyPairGenerator.initialize(1024);
        keyPair = keyPairGenerator.generateKeyPair();
    }

    public String encrypt(String data) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
        byte[] encryptedData = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    public String decrypt(String encryptedData) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
        byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedData, StandardCharsets.UTF_8);
    }
}

哈希算法

哈希算法是指根据明文生成一个唯一的密文,一般来说不能通过密文反推出明文。常见的哈希算法有 MD5、SHA 等。

MD5 哈希

在 Java 中使用 MD5 进行哈希的方法如下:

import java.math.BigInteger;
import java.security.MessageDigest;

public class MD5Hash {

    public static String hash(String data) throws Exception {
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        messageDigest.update(data.getBytes());
        byte[] hashedData = messageDigest.digest();
        return String.format("%032x", new BigInteger(1, hashedData));
    }
}

SHA 哈希

在 Java 中使用 SHA 进行哈希的方法如下:

import java.math.BigInteger;
import java.security.MessageDigest;

public class SHAHash {

    public static String hash(String data) throws Exception {
        MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
        messageDigest.update(data.getBytes());
        byte[] hashedData = messageDigest.digest();
        return String.format("%064x", new BigInteger(1, hashedData));
    }
}

示例说明

示例一:使用 AES 加密解密字符串

try {
    String secretKey = "abcdefghijklmnop";
    String data = "hello, world";
    AESEncryptor encryptor = new AESEncryptor(secretKey);
    String encryptedData = encryptor.encrypt(data);
    System.out.println("Encrypted data: " + encryptedData);
    String decryptedData = encryptor.decrypt(encryptedData);
    System.out.println("Decrypted data: " + decryptedData);
} catch (Exception e) {
    e.printStackTrace();
}

输出结果:

Encrypted data: gvRue/ouZLbzCphZpdU4OQ==
Decrypted data: hello, world

示例二:使用 SHA 对字符串进行哈希

try {
    String data = "hello, world";
    String hashedData = SHAHash.hash(data);
    System.out.println("Hashed data: " + hashedData);
} catch (Exception e) {
    e.printStackTrace();
}

输出结果:

Hashed data: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java对字符串进行加密解密 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Spring Framework远程代码执行漏洞分析(最新漏洞)

    Spring Framework远程代码执行漏洞分析(最新漏洞) 漏洞简介 Spring Framework是一个由Pivotal团队(前身是SpringSource)开发的开源框架,应用广泛,而且易于使用。但是,最新版本的Spring Framework(版本5.2.0到5.3.0)中存在一种远程代码执行漏洞。攻击者可以通过构造恶意的输入来执行任意代码,导…

    Java 2023年5月19日
    00
  • Java try()语句实现try-with-resources异常管理机制操作

    Java try-with-resources 异常管理机制 Java try-with-resources 是在 Java 7 版本中引入的语言特性,它通过自动关闭资源对象来释放资源(如文件、网络连接等),省去了我们手动关闭这些资源的繁琐过程,同时也增强了异常处理的机制。 这个语法结构就是在 try 块内初始化资源,Java 会自动将其关闭,它是基于 Au…

    Java 2023年5月27日
    00
  • 图解Linux下安装Tomcat服务器

    下面是“图解Linux下安装Tomcat服务器”的完整攻略。 准备工作 下载Tomcat,推荐从官网下载:http://tomcat.apache.org/ 确认机器已安装JDK,建议使用OpenJDK 8: sudo apt-get update sudo apt-get install -y openjdk-8-jdk 确认机器中/etc/profile…

    Java 2023年5月19日
    00
  • SpringMVC访问静态资源的方法

    以下是关于“SpringMVC访问静态资源的方法”的完整攻略,其中包含两个示例。 SpringMVC访问静态资源的方法 SpringMVC是一种基于Java的Web框架,它可以帮助我们快速开发Web应用程序。在本文中,我们将讲解如何在SpringMVC中访问静态资源。 方法一:使用标签 在src/main/webapp目录下创建一个名为static的文件夹。…

    Java 2023年5月17日
    00
  • java实现鲜花销售系统

    Java实现鲜花销售系统攻略 确定需求 在开始实现鲜花销售系统之前,需要先明确系统需要实现哪些功能和特点,例如: 用户登陆/注册功能 鲜花分类、展示、搜索功能 订单提交、支付、物流追踪功能 管理员对鲜花、订单、用户管理功能 设计数据库 确定需要实现的功能后,我们需要设计一个合适的数据库。数据库的结构需要包含以下表: user (用户信息表) flower (…

    Java 2023年5月30日
    00
  • Spring Security安全框架之记住我功能

    下面我将详细介绍“Spring Security安全框架之记住我功能”的完整攻略,包括步骤、关键代码和示例。希望能够对您有所帮助。 步骤 导入相关依赖:在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.security</groupId> <ar…

    Java 2023年5月20日
    00
  • JAVA初级项目——实现图书管理系统

    JAVA初级项目——实现图书管理系统 项目概述 图书管理系统是一个针对图书馆、书店等场所用来管理图书的软件。该系统可以实现图书的借阅、归还、查询、添加、删除等功能,提高了图书管理的效率。 本项目主要是通过Java语言和基于Web的技术实现一个简单的图书管理系统,主要包括以下功能模块: 用户登录和注册:用户可实现登录和注册账号。 图书管理:管理员可添加、删除图…

    Java 2023年5月23日
    00
  • 如何使用Java加密技术?

    如何使用Java加密技术? 在Java中,加密技术可以通过Java提供的加密API来实现。常见的加密方式有对称加密、非对称加密和哈希加密。下面是使用Java加密技术的完整使用攻略: 1. 对称加密 对称加密是指加密和解密都使用同一个密钥的加密方式。Java中常见的对称加密算法有DES、3DES、AES等,其中AES被广泛应用。下面是使用AES对称加密的示例代…

    Java 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部