如何使用Java加密技术?

如何使用Java加密技术?

在Java中,加密技术可以通过Java提供的加密API来实现。常见的加密方式有对称加密、非对称加密和哈希加密。下面是使用Java加密技术的完整使用攻略:

1. 对称加密

对称加密是指加密和解密都使用同一个密钥的加密方式。Java中常见的对称加密算法有DES、3DES、AES等,其中AES被广泛应用。下面是使用AES对称加密的示例代码:

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

public class AESUtil {

    private static final String KEY_ALGORITHM = "AES";
    private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";

    public static String encrypt(String data, String key) throws Exception {
        // 1. 生成密钥
        KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);
        keyGenerator.init(128);
        SecretKey secretKey = new SecretKeySpec(key.getBytes("UTF-8"), KEY_ALGORITHM);
        // 2. 加密
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    public static String decrypt(String data, String key) throws Exception {
        // 1. 生成密钥
        KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);
        keyGenerator.init(128);
        SecretKey secretKey = new SecretKeySpec(key.getBytes("UTF-8"), KEY_ALGORITHM);
        // 2. 解密
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(data));
        return new String(decryptedData);
    }
}

使用示例:

public static void main(String[] args) throws Exception {
    String data = "Hello world!";
    String key = "1234567890abcdef";
    String encryptedData = AESUtil.encrypt(data, key);
    System.out.println("加密后的数据:" + encryptedData);
    String decryptedData = AESUtil.decrypt(encryptedData, key);
    System.out.println("解密后的数据:" + decryptedData);
}

2. 非对称加密

非对称加密是指加密和解密使用不同的密钥的加密方式。在Java中,常用的非对称加密算法有RSA和DSA。下面是使用RSA非对称加密的示例代码:

import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;

public class RSAUtil {

    private static final String KEY_ALGORITHM = "RSA";
    private static final String CIPHER_ALGORITHM = "RSA/ECB/PKCS1Padding";

    public static String encrypt(String data, String publicKey) throws Exception {
        // 1. 生成密钥对
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        PublicKey _publicKey = keyPair.getPublic();
        PrivateKey _privateKey = keyPair.getPrivate();
        // 2. 加密
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, _publicKey);
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    public static String decrypt(String data, String privateKey) throws Exception {
        // 1. 获取私钥
        PrivateKey _privateKey = RSAUtil.string2PrivateKey(privateKey);
        // 2. 解密
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, _privateKey);
        byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(data));
        return new String(decryptedData);
    }

    public static PrivateKey string2PrivateKey(String privateKeyStr) throws Exception {
        byte[] keyBytes = Base64.getDecoder().decode(privateKeyStr.getBytes());
        return KeyFactory.getInstance(KEY_ALGORITHM).generatePrivate(new PKCS8EncodedKeySpec(keyBytes));
    }
}

使用示例:

public static void main(String[] args) throws Exception {
    String data = "Hello world!";
    String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eL56hTphG5sqZe9DXIx" +
            "vZmzdVXteoFXhuu6D1wOAHlq3OjO+lg23kQ7RFzj7cWzKXTcDCufzMBVf+JcdUEy" +
            "YQDLQZ7HlCEJHmK4RFc4A2X0BQAL6Fd1rKxXxcvJk5zJNzbh2rMN/aKf9u7CVy45" +
            "Vk6Sd82p1cK8muMrbLptBXAgjVQxI5pOQL0XrDQEZ52Rqd+LkJc1dpnA+PKLwsWI" +
            "wZgLzOMXTZbpF0mLxibcqsXT3Wdl9xat4vmhVzVy+dSkvfc3nhLR2ZC7euxxKtX9" +
            "VLX+5H86sTG8LVjVXEppKhR+JjL16JvCZkn+h2Z+Bq7ak4MbaBcwq5PxxKLOkzcX" +
            "YQIDAQAB";
    String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCWh+ra+ITvLSoE" +
            "8hRgUVpB6D9sqliL91dTdRgWFFvXy/JXFm4X7cE1yEz6K6rFLNQ/NhyF6vLkYwjf" +
            "ztzdIhZJA8t7QFjVzCpt/STbKzyrtCZWQC7vz0Adq7LgPlERQvD5szXHjH+4P+ud" +
            "9hSab2Ua5j8PT9cP33OqWZ3SIlh81ysB0PehdOQWBJz6Y9+Y4uIFDGzHQLqS4fEi" +
            "gEJkITHVAgWMbJ2mm6jLis8wKgd3VonC7C/i3eKnzXishZBaMlV+1vBUxbSQJzar" +
            "+ADiLWJ5dxg5pf8UZYCzS/KaAEwmXs2zjR5R5+tS3hovIZ7uB/DCnQMnS8r9f4C2" +
            "Y6hkabVrAgMBAAECggEASG4/x+hGi1S7r2W6tRVh43Zez2IJUbkk5xMWbJzDRX3j" +
            "AmxSzuKeFKFbGORgmt0a0v7sH7IB+LyFXdYktQwWe2/zDjS3oiCxNSqESXVZGgiO" +
            "5sB5xqhlVZMfGUrpoFADccBwWJ2FZC/gCo0wpXSvPEs7753eKjeDpx6ttviu/UZa" +
            "3KXzEVpvaPDouk9zjZyCjrZ6FbuIHmCdfDGuO6jtZyUOEMz+uPFg2idqZKt7ffYM" +
            "4+n8JY82vTca0WEqRCK4WOgIW2JJXvRm1QjAwHtlzJhuMBDTYCoLPse8FhqK2O+K" +
            "8M3cQH5DCG0D95ViphSGW3meTbXh80mYqluPfA7uwQKBgQD7VvHfMnjICflW/Dos" +
            "Odz5wTYnhAK0maUET9OM0EZP4zajdpyztPouhu8c7Ru2hEshm8i1eT2xrkiawbnV" +
            "7BUuxD8gA8X+5LpC6rX9Le7OHQ9YGUEp8TKqIpONRRe/wQoakrXgE+PuGvGHn0KJ" +
            "9AKmp7i3q3QoZAzzj8eRaTc4OQKBgQDCz9GaWTL+R8Yw2MeSfkWeKiW0L6+xMt+2" +
            "Vmgdh7f931mSThe5Owveqfon4Owkr8+e6gm9w3S6QlQm7VbbfS6quJKOcISQBrGG" +
            "a5f0zZh1wkXNZ2P0LIzR8xO8kJMuJr7t+uzrdbp4NVdZKPdRC7JV0J0AZUQEZx88" +
            "EBgyo2c36wKBgA9NBxK7Cm5kloT9eVnZxNBrP5Xt/HLF2vhyY3erfRmt+8pQj6K2" +
            "55Kv3TITouvlfPuIOAbp92k6cG/nKOFh/I1Pwo5q6HbSTXoyuOxWrk0XLZ6d01ZQ" +
            "K1RHKklXKwjYbp5kVpX2L6X/XtbkCfF/GIsVq2zzVXUHsA5CJmzjyC+1AoGBAN/q" +
            "sdqXeU3blb8Zf62Cov+mX8JosnXuk/q6WDCXnxzz5xrA6UBgt9BfOIgOs05lNHAc" +
            "RkYjkDpTa7NnNri1Mdwc3HvLPzfvgEgto7oAHRWgHx78zFK6ErM17PJoq8iGCN3f" +
            "u63R11kd9sLfesuygRb9UQ2w5qqAw0bO8ABGoS//AoGBAJy861WIpmtozA4fmAGw" +
            "BLa/1KtWqWYkT7r8DMHwYGhKuaL0O0hLz630rjTkPZuI4gWtK/V2iOdOolWvX9Jt" +
            "L+auk/TH1Ew4cHY5bWeZBKI3vFJxLAG+w8+la7r1y/Zlxrx+6Gwmo9OYb977V6sI" +
            "euU9/F3GKngW/urjLjhkkWm9";

    String encryptedData = RSAUtil.encrypt(data, publicKey);
    System.out.println("加密后的数据:" + encryptedData);
    String decryptedData = RSAUtil.decrypt(encryptedData, privateKey);
    System.out.println("解密后的数据:" + decryptedData);
}

3. 哈希加密

哈希加密是将任意长度的消息压缩成固定长度的摘要的加密方式。在Java中,常用的哈希算法有MD5和SHA系列算法。下面是使用MD5哈希加密的示例代码:

import java.security.MessageDigest;

public class MD5Util {

    public static String encrypt(String data) throws Exception {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        byte[] digest = md5.digest(data.getBytes());
        StringBuilder sb = new StringBuilder();
        for (byte b : digest) {
            sb.append(String.format("%02x", b & 0xff));
        }
        return sb.toString();
    }
}

使用示例:

public static void main(String[] args) throws Exception {
    String data = "Hello world!";
    String encryptedData = MD5Util.encrypt(data);
    System.out.println("加密后的数据:" + encryptedData);
}

以上是使用Java加密技术的完整使用攻略,其中包含了对称加密、非对称加密和哈希加密三种加密方式。通过这些示例代码,可以方便地在Java中实现数据加密和解密的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用Java加密技术? - Python技术站

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

相关文章

  • springData使用QueryDsl的示例代码

    让我来详细讲解一下“Spring Data 使用 Querydsl 的示例代码”的完整攻略。 简介 Querydsl 是一个基于 Java 类型化查询的框架,使得编写类型安全、易于理解的查询变得容易。 Spring Data 是 Spring 框架的一部分,通过提供抽象化的数据存储层来简化对数据访问的开发。Spring Data Querydsl 是 Spr…

    Java 2023年5月20日
    00
  • java实现服务器文件打包zip并下载的示例(边打包边下载)

    让我详细讲解“Java实现服务器文件打包zip并下载的示例(边打包边下载)”的完整攻略。 1. 准备工作 在开始操作之前,需要准备以下两件事情: 相应的Java开发环境; 一个Web服务器,如Tomcat。 2. 解压文件并创建Java项目 首先,需要从服务器中解压需要打包的文件。接下来,在Java项目中创建以下文件夹: src/main/java src/…

    Java 2023年5月19日
    00
  • SpringBoot JSON全局日期格式转换器实现方式

    下面是“SpringBoot JSON全局日期格式转换器实现方式”的完整攻略,分为以下几个部分: 需求 在进行SpringBoot开发时,经常需要使用到JSON数据,而时间日期类型在进行序列化和反序列化时容易发生问题。因此,我们需要实现一个全局的日期格式转换器,以便于在转换时管理时间日期类型。 实现步骤 1. 实现全局日期格式转换器 在进行SpringBoo…

    Java 2023年6月2日
    00
  • 详解SpringBoot 处理异常的几种常见姿势

    详解SpringBoot处理异常的几种常见姿势 在SpringBoot开发中,异常处理是一个非常重要的环节。合理的异常处理能够提高系统的稳定性和可维护性。本文将介绍几种常见的SpringBoot处理异常的姿势。 1. @ControllerAdvice和@ExceptionHandler @ControllerAdvice是Spring4.0引入的一个注解,…

    Java 2023年5月15日
    00
  • MyBatis还是JPA?终于有答案了

    我们来详细讲解“MyBatis还是JPA?终于有答案了”的完整攻略。 1. 背景介绍 在进行Java Web开发时,ORM框架是不可或缺的工具之一,其可以将Java对象映射到关系型数据库中。MyBatis和JPA是流行的ORM框架,那么如何选择呢? 2. MyBatis和JPA区别 2.1 MyBatis MyBatis是基于SQL语句的ORM框架,其与关系…

    Java 2023年5月19日
    00
  • Java对象的四种引用方式实例分析

    Java对象的四种引用方式实例分析 在Java中,对象的引用方式可以分为四种:强引用、软引用、弱引用和虚引用。每种引用方式有其特定的应用场景和特点。下面将详细介绍每一种引用方式以及其使用示例。 强引用 强引用是Java中最常用的引用方式。定义一个对象并将其赋值给一个引用变量时,这个引用变量就是强引用。只要强引用存在,对象就不会被垃圾回收机制回收。 例如:定义…

    Java 2023年5月26日
    00
  • hibernate-validator如何使用校验框架

    下面是详细讲解“hibernate-validator如何使用校验框架”的完整攻略。 简介 hibernate-validator是一款基于Java Bean Validation标准的校验框架,能够轻松地将校验逻辑应用到JavaBean中,大大提高开发效率,减少出错几率。 使用步骤 1. 引入依赖 在项目的pom.xml文件中添加如下依赖配置: <d…

    Java 2023年5月20日
    00
  • SpringBoot分页的实现与long型id精度丢失问题的解决方案介绍

    针对SpringBoot分页的实现与long型id精度丢失问题的解决方案,我提供以下完整攻略: SpringBoot分页的实现 SpringBoot中分页的实现可以通过Pageable和Page进行操作。 1、Pageable Pageable是一个接口,我们可以通过PageRequest类来实例化这个接口。 Pageable pageable = Page…

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