Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java技术专题:「入门到精通系列」深入探索常用的六种加密技术和实现
随着信息安全的日益重要,加密技术在软件开发领域中扮演着关键的角色。Java作为一门广泛应用的编程语言,提供了丰富的加密库和API,使得开发者可以轻松实现各种加密算法。本文将深入探索Java技术中常用到的六种加密技术,包括对称加密、非对称加密、哈希算法、消息摘要、数字签名和数字证书,并通过具体的实现代码帮助读者更好地理解和应用这些加密技术。
IT_陈寒
2024/01/08
3380
Java技术专题:「入门到精通系列」深入探索常用的六种加密技术和实现
学一学RSA加密吧,下次对接的时候就不会被对方Diss了
RSA加密算法:是一种非对称加密算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;公钥用作加密,私钥则用作解密。只能用相对应的私钥才能解密并得到原本的明文,最初用来加密的公钥不能用作解密,加密和解密需要两个不同的密钥,因此被称为非对称加密,加密的双方在开发前根据明文的长度/数据加密等级需要协定好密钥的位数,目前可使用1024、2048、4096字节的密钥(key),安全性随字节长度升高而升高,性能随之而下降,时间复杂度为O(nlogn)。
关忆北.
2021/12/07
1.2K0
SpringCloud-数据认证加密总结
在当今分布式系统的日益复杂和信息传递的广泛网络化环境中,确保通信的安全性至关重要。数据的加密和认证作为保障信息传递安全的关键手段,在分布式系统中扮演着不可或缺的角色。Spring Cloud,作为一套构建微服务架构的强大框架,提供了多种灵活而强大的数据加密和认证方式。从传统的 MD5 散列算法到现代的 OAuth 2.0 和 JWT(JSON Web Token)标准,每种加密和认证方式都针对不同的应用场景和安全需求提供了特定的解决方案。
Damon小智
2024/03/06
2360
SpringCloud-数据认证加密总结
面试题:非对称加密和对称加密的区别以及优缺点
在计算机安全领域,加密是一种常用的手段来保护数据的安全性。对称加密和非对称加密是两种常见的加密方式,它们在Java中都有相应的实现。
GeekLiHua
2025/01/21
1630
关于加解密、加签验签的那些事 | 得物技术
面对MD5、SHA、DES、AES、RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公钥加密、私钥解密、私钥加签、公钥验签。这些都什么鬼?或许在你日常工作没有听说过这些名词,但是一旦你要设计一个对外访问的接口,或者安全性要求高的系统,那么必然会接触到这些名词。所以加解密、加签验签对于一个合格的程序员来说是必须要掌握的一个概念。接下来我们就一文彻底搞懂这些概念。
用户10346649
2023/03/10
1.1K0
关于加解密、加签验签的那些事 | 得物技术
加解密算法分析与应用场景
在日常开发中,无论是使用何种编程语言,我们都会遇到加解密的需求。例如,为了保护接口数据安全,我们需要对数据进行加密传输;在HTTPS协议中,通过非对称加密传输客户端私钥,然后双方使用该私钥进行对称加密通信;使用MD5算法进行文件一致性校验等。然而,面对众多的加解密方案,我们往往不清楚何时使用哪种方法。本文将为您梳理当前主流的加解密技术,并对算法进行科普性说明,但不涉及具体算法分析。根据日常应用场景,加解密技术大致可分为以下四类:
不惑
2024/05/13
5970
加解密算法分析与应用场景
Java加密与解密之非对称加密算法
非对称加密算法与对称加密算法的主要差别在于非对称加密算法用于加密和解密的密钥不相同,非对称加密算法密钥分为公钥和私钥,公钥加密只能用私钥解密,反之私钥加密只能用公钥解密。相比对称加密算法,非对称加密算法加/解密效率低,但安全性高,这两种算法一般结合使用。常见非对称加密算法有RSA、ECC、Elgamal等。
布禾
2020/11/24
1.2K0
支付项目中常用的加密解密算法一文讲透
作为支付机构,传输的数据大多是非常隐私的,比如身份证号、银行卡号、银行卡密码等。一旦这些信息被不法分子截获,就可能直接被盗刷银行卡,给消费者造成巨大损失。如果不法分子获取的信息是加密的,且没有解密的秘钥,那么对于不法分子来说这些信息就是一堆乱码,这就是加码最重要的意义。
用户3587585
2024/04/30
1.3K0
支付项目中常用的加密解密算法一文讲透
非对称加密之RSA是怎么加密的
前几天阿粉刚刚说了这个 MD5 加密的前世今生,因为 MD5 也确实用的人不是很多了,阿粉就不再继续的一一赘述了,今天阿粉想给大家分享的,是非对称加密中的一种,那就是 RSA 加密算法。
Java极客技术
2022/12/04
1.2K0
【深度知识】RSA加密、解密、签名、验签的原理及方法
RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。者能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称之为公钥和私钥。如果用公钥进行加密,则只能通过对应的私钥去解密,如果用私钥进行加密,则只能通过对应的公钥去解密。两者之间有数字相关,该加密发酸的原理就是对一极大整数做因数分解的困难行来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)
辉哥
2021/03/02
6.9K0
【深度知识】RSA加密、解密、签名、验签的原理及方法
对称加密与非对称加密
优点:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开、计算量小、加密速度快、加密效率高。
lyb-geek
2022/03/09
2.6K0
JAVA中的加密算法之双向加密(二)
本节主要讲述Java双向加密算法中的非对称加密算法实现。 (二)、非对称加密 1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥 (privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 1. RSA 公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
幽鸿
2020/04/02
1.6K0
快速了解常用的非对称加密算法,再也不用担心面试官的刨根问底
加密算法通常被分为两种:对称加密算法和非对称加密算法。其中,对称加密算法在加密和解密时使用的密钥相同;非对称加密算法在加密和解密时使用的密钥不同,分为公钥和私钥。此外,还有一类叫做消息摘要算法,是对数据进行摘要并且不可逆的算法。
万猫学社
2022/04/22
1.6K0
快速了解常用的非对称加密算法,再也不用担心面试官的刨根问底
面试官:如何设计一个对外的安全接口?
哈喽,我是狗哥。最近在跟业务方对接需要我这边出个接口给到他们调用,这种涉及外部调用的接口设计,一般都涉及很多方面,比如:
JavaFish
2022/01/17
5920
面试官:如何设计一个对外的安全接口?
加密-解密详解
参考视频: https://www.bilibili.com/video/BV1tz4y197hm
用户5927264
2020/07/30
2.9K0
基础篇:java.security框架之签名、加密、摘要及证书
和前端进行数据交互时或者和第三方商家对接时,需要对隐私数据进行加密。单向加密,对称加密,非对称加密,其对应的算法也各式各样。java提供了统一的框架来规范(java.security)安全加密这类API。下面将一一介绍
潜行前行
2021/02/05
1.8K0
JAVA使用几种非对称加密
DH: package com.fengyunhe.asymmetric; import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin; import javax.crypto.*; import javax.crypto.interfaces.DHPublicKey; import javax.crypto.spec.DHParameterSpec; import java.security.*; import java.security
前Thoughtworks-杨焱
2021/12/08
4590
深入解析RSA算法原理及其安全性机制
RSA算法是一种广泛使用的公钥加密算法,它的名称来源于其创始人Ron Rivest、Adi Shamir和Leonard Adleman的首字母缩写。该算法于1977年首次被提出,并迅速成为公钥密码学的标准之一。RSA算法的安全性基于大数分解和离散对数等数学难题,使得它在保护数据隐私和完整性方面具有很高的可靠性。
公众号:码到三十五
2024/04/02
2.1K0
深入解析RSA算法原理及其安全性机制
每日一博 - 对称加密算法 vs 非对称加密算法
我们今天来梳理一下将分别介绍这两种加密算法的优缺点,并通过Java代码实现和测试结果来验证其效果。
小小工匠
2023/05/29
4880
Java安全编程:公钥加密和私钥签名的实践指南
在数字通信和数据保护领域,非对称加密技术扮演着至关重要的角色。这种技术涉及两种关键操作:使用公钥进行加密和使用私钥进行签名。这两种操作虽然使用相似的技术,但它们的目的、安全需求和实现方式却大相径庭。
陆业聪
2024/10/28
3340
Java安全编程:公钥加密和私钥签名的实践指南
推荐阅读
相关推荐
Java技术专题:「入门到精通系列」深入探索常用的六种加密技术和实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验