前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何使用Java进行加密和解密

如何使用Java进行加密和解密

作者头像
用户1289394
发布于 2023-09-22 00:47:37
发布于 2023-09-22 00:47:37
76800
代码可运行
举报
文章被收录于专栏:Java学习网Java学习网
运行总次数:0
代码可运行

Java中,我们可以使用许多不同的加密和解密技术来保护数据。这些技术可以用于加密密码、保护敏感数据、网络通信等。下面将介绍Java中常用的加密和解密技术和实现方法。

1、对称加密算法(Symmetric Cryptography)

对称加密是一种将数据加密的技术,它采用一个密钥来完成加密和解密的过程。这种技术非常高效,因为它只需要一个密钥来进行加密和解密操作,并且能够以很快的速度处理大量数据。

在Java中,最常用的对称加密算法是AES(Advanced Encryption Standard)算法。下面是一个示例代码演示如何使用Java的AES加密和解密:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class AESEncryptionExample {

    public static void main(String[] args) throws Exception {
        String data = "Hello, world!";
        SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();

        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedData = cipher.doFinal(data.getBytes());

        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] decryptedData = cipher.doFinal(encryptedData);

        System.out.println(new String(decryptedData));
    }

}

这段代码首先生成了一个随机密钥,然后使用它对数据进行加密和解密操作,并将结果输出到控制台上。

2、非对称加密算法(Asymmetric Cryptography)

非对称加密是一种可以用于加密和解密数据的技术,它使用两个不同的密钥来执行这些操作:一个公钥和一个私钥。公钥是任何人都可以获得的,而私钥则是只有特定用户可以获得的。利用这种技术,数据被发送给服务节点时,只有正确配对的私钥才能对其进行解密。

在Java中,最常用的非对称加密算法是RSA(Rivest–Shamir–Adleman)算法。下面是一个示例代码演示如何使用Java的RSA加密和解密:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;

import javax.crypto.Cipher;

public class RSAEncryptionExample {

    public static void main(String[] args) throws Exception {
        String data = "Hello, world!";

        KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        System.out.println(Base64.getEncoder().encodeToString(encryptedData));

        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedData = cipher.doFinal(encryptedData);
        System.out.println(new String(decryptedData));
    }

}

这段代码生成了一对公钥和私钥,并使用公钥加密数据。然后,它使用私钥解密数据,并将解密后的数据输出到控制台。

3、散列算法(Hashing)

散列算法是一种用于比较多个数据块并找出相同之处的技术。它不支持加密操作,而是通过将输入数据转换为固定长度的哈希值来实现其目标。由于任意两个不同的输入会产生不同的哈希值,因此散列函数可以用于检测数据是否被篡改或冒充。

在Java中最常用的散列算法是SHA-256(Secure Hash Algorithm 256)。下面是一个示例代码演示如何使用Java的SHA-256:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;

public class SHA256Example {

    public static void main(String[] args) throws Exception {
        String data = "Hello, world!";

        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hash = digest.digest(data.getBytes(StandardCharsets.UTF_8));

        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < hash.length; i++) {
            String hexValue = Integer.toHexString(0xFF & hash[i]);
            if (hexValue.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hexValue);
        }
        System.out.println(hexString.toString());
    }

}

这段代码将字符串数据转换为SHA-256哈希值,并将其输出到控制台上。

4、数字签名(Digital Signature)

数字签名是一种用于确保数据完整性身份验证的技术。它使用一个私钥来加密数据,使其无法被篡改或伪造,并使用相应的公钥进行身份验证,确保只有拥有相应私钥的人能够对其进行更改或访问操作。

在Java中最常用的数字签名算法是DSA(Digital Signature Algorithm)。下面是一个示例代码演示如何使用Java的DSA:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;

public class DigitalSignatureExample {

    public static void main(String[] args) throws Exception {
        String data = "Hello, world!";

        KeyPair keyPair = KeyPairGenerator.getInstance("DSA").generateKeyPair();
        Signature signature = Signature.getInstance("SHA1withDSA");
        signature.initSign(keyPair.getPrivate());
        signature.update(data.getBytes());

        byte[] signedData = signature.sign();

        signature.initVerify(keyPair.getPublic());
        signature.update(data.getBytes());

        boolean verified = signature.verify(signedData);
        System.out.println(verified);
    }

}

这段代码生成一对公钥和私钥,并使用私钥对数据进行签名。然后,它使用公钥验证签名,并在控制台上输出结果。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-18 07:30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
jeDate日期控件的使用以及选中后点确定按钮关闭功能
在之前的文章里,jedate-开始使用一款好用的时间插件:https://www.jianshu.com/p/961c3f364e2a,运用这款控件确实省了不少力气,这两年,该控件开发者也在不断的进行更新,所以在项目中有些引用也相对应的进行了一些改变,今天要实现一个 jeDate日期控件的使用以及选中后点确定按钮关闭功能。
王小婷
2025/05/18
420
jeDate日期控件的使用以及选中后点确定按钮关闭功能
jeDate日期控件在项目中实际应用
需求: 1:可提供日期不超过当前日期或者(验证选中日期是否超过今天) 2:日期验证 3:input表格里面获取当前系统默认日期 4:选着日期点击选中后点确定按钮才关闭 5:验证结束日期大于开始日期
王小婷
2019/09/20
6870
jedate教程
jeDate日期控件 -(原生JS版)jeDate V6.5.0 是一款原生JS开发的 不依赖任何第三方库 大众化的日期控件,包含 多语言、设定年月(YYYY-MM)、日期范围限制、开始日期设定、自定义日期格式、根据不同的日期格式,显示不同内容。
王小婷
2025/05/18
560
jedate教程
jedate-开始使用一款好用的时间插件
jeDate日期控件 -(原生JS版)jeDate V6.5.0 是一款原生JS开发的 不依赖任何第三方库 大众化的日期控件,包含 多语言、设定年月(YYYY-MM)、日期范围限制、开始日期设定、自定
王小婷
2018/05/31
1.5K0
JavaScript实现input框获取系统默认年月日时分秒
这是对旧的已上线项目的维护之中优化的一个部分,要求是在input框里面默认当前系统的时间。实现如下图所示的效果。
王小婷
2019/01/28
3.7K0
jDate移动端用法
前面写过选择年月日的方法,其实也可以用在移动端,样式也还算可以,用法与pc端类似;
王小婷
2019/11/27
8050
JQuery 日期选择框,精确到时分秒类型。
貌似升级了,官方网址:http://www.jemui.com/uidoc/jedate.html
geekfly
2022/05/06
1.5K0
JQuery 日期选择框,精确到时分秒类型。
JavaScript实现input框获取系统默认年月日时分秒
这是对旧的已上线项目的维护之中优化的一个部分,要求是在input框里面默认当前系统的时间。实现如下图所示的效果。
王小婷
2025/05/18
900
JavaScript实现input框获取系统默认年月日时分秒
Bootstrap 时间控件 datetimepicker
Bootstrap 的时间控件易用且美观,下面将用法记录一下,大家有需要可以直接看官网的介绍,还是很基础的。 网址:http://www.bootcss.com/p/bootstrap-datetimepicker/
全栈程序员站长
2022/08/25
4.6K0
Bootstrap 时间控件 datetimepicker
jeDate可提供选择日期不超过当前日期
参考之前写的,jeDate日期控件的使用以及选中后点确定按钮关闭功能 https://www.jianshu.com/p/393d9e992144。
王小婷
2019/08/07
1.5K0
jeDate可提供选择日期不超过当前日期
05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du
逸鹏
2018/04/10
7040
05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器
mydate97时间控件的使用
《mydate97时间控件的使用》文章摘要:本文主要介绍了一个基于jQuery的日期时间选择插件——mydate97,并提供了相关示例代码。该插件具有灵活配置、支持多种格式、可自定义样式、跟随焦点、日期计算、国际化、封装UI、集成常用方法等特点。使用该插件可以方便地实现日期时间选择功能,提高开发效率。
别先生
2018/01/02
1.6K0
mydate97时间控件的使用
bootstrap日期时间控件
链接:http://pan.baidu.com/s/1sl56aw1 密码:jc2y 页面代码
全栈程序员站长
2022/08/31
3.5K0
bootstrap日期时间控件
jQuery之datetimepicker控件(时间单位精确到分钟)
一、效果图 image.png image.png image.png image.png 二、代码 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1
week
2018/08/24
2.6K0
jQuery之datetimepicker控件(时间单位精确到分钟)
vue基础(二)
概念:Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符指示;
不愿意做鱼的小鲸鱼
2022/09/24
6450
vue基础(二)
ssm之八 时间日期格式转换取值
点击编辑,emp/getEmp/${emp.empno},首先要获得当前编号的员工数据,相关dao层等代码,去系列教程前几章查看,本处不再赘述。
张哥编程
2024/12/17
850
ssm之八 时间日期格式转换取值
移动端mobiscroll时间控件的使用
最近需要实现一个在手机上选择时间的功能,当然首先想到的就是时间控件的使用,最后找到一个相对比较合适,在此记录一下。
全栈程序员站长
2022/08/31
1.8K0
移动端mobiscroll时间控件的使用
一个简易的选择小时(时分秒)的插件
老规矩,先上图,效果如下所示: 图片.png 图片.png 首先引入boostrap和juqery相关 <link rel="stylesheet" href="https://cdn.bootcss
王小婷
2018/08/22
1.6K0
一个简易的选择小时(时分秒)的插件
daterangepicker与vue集成,vue无法获得日期控件时间的修改解决方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序新视界
2019/09/18
1.8K0
日期时间选择器、Bootstrap日期和时间表单组件。bootstrap-datetimepicker实现年月日,时分秒的选择。
参考链接:http://www.bootcss.com/p/bootstrap-datetimepicker/
别先生
2019/06/05
4.6K0
日期时间选择器、Bootstrap日期和时间表单组件。bootstrap-datetimepicker实现年月日,时分秒的选择。
推荐阅读
相关推荐
jeDate日期控件的使用以及选中后点确定按钮关闭功能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验