【算法】Java实现RSA算法

这篇具有很好参考价值的文章主要介绍了【算法】Java实现RSA算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是RSA算法

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它是目前最广泛使用的公钥加密算法之一。RSA算法是由三位密码学家(Ron Rivest、Adi Shamir、Leonard Adleman)在1977年提出的。

RSA算法基于大数因子分解的数学难题,它使用一对密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。公钥可以公开分享给其他人,而私钥必须保密。

RSA算法的主要原理如下:

  1. 选择两个不同的大素数p和q。
  2. 计算n = p * q,n被称为模数(modulus)。
  3. 计算欧拉函数φ(n) = (p - 1) * (q - 1)。
  4. 选择一个小于φ(n)且与φ(n)互质的整数e,e被称为公钥指数(public exponent)。
  5. 计算满足以下条件的整数d:(d * e) % φ(n) = 1,d被称为私钥指数(private exponent)。
  6. 公钥由(n, e)组成,私钥由(n, d)组成。

加密时,将明文m转换为整数M,然后使用公式C = M^e mod n对明文进行加密,得到密文C。解密时,使用私钥指数d,对密文C进行解密得到明文M,再将M转换为明文m。

RSA算法的安全性基于大素数因子分解问题的难度,即找到n的两个大素数因子p和q。当前,只要使用足够大的密钥长度,如2048位或以上,RSA算法被认为是安全的。

RSA算法不仅可以用于加密和解密数据,还可以用于数字签名、密钥协商和密钥交换等密码学应用。

总结来说,RSA是一种非对称加密算法,使用公钥加密数据,私钥解密数据。它的安全性基于大素数因子分解问题的难度。RSA算法在现代密码学中起着重要的作用,并被广泛应用于安全通信和数据保护领域。

2.使用Java实现RSA算法加密

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.util.Base64;

public class RSAExample {
    public static void main(String[] args) throws Exception {
        String plainText = "Hello, World!";

        // 生成密钥对
        KeyPair keyPair = generateKeyPair();

        // 获取公钥和私钥
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();

        // 使用公钥加密
        byte[] encryptedBytes = encrypt(plainText, publicKey);
        String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
        System.out.println("Encrypted Text: " + encryptedText);

        // 使用私钥解密
        byte[] decryptedBytes = decrypt(encryptedBytes, privateKey);
        String decryptedText = new String(decryptedBytes);
        System.out.println("Decrypted Text: " + decryptedText);

        // 使用私钥签名
        byte[] signatureBytes = sign(plainText, privateKey);
        String signatureText = Base64.getEncoder().encodeToString(signatureBytes);
        System.out.println("Signature: " + signatureText);

        // 使用公钥验证签名
        boolean isVerified = verify(plainText, signatureBytes, publicKey);
        System.out.println("Signature Verified: " + isVerified);
    }

    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048); // 密钥长度为2048位
        return keyPairGenerator.generateKeyPair();
    }

    public static byte[] encrypt(String plainText, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(plainText.getBytes());
    }

    public static byte[] decrypt(byte[] encryptedBytes, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        return cipher.doFinal(encryptedBytes);
    }

    public static byte[] sign(String plainText, PrivateKey privateKey) throws Exception {
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(privateKey);
        signature.update(plainText.getBytes());
        return signature.sign();
    }

    public static boolean verify(String plainText, byte[] signatureBytes, PublicKey publicKey) throws Exception {
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initVerify(publicKey);
        signature.update(plainText.getBytes());
        return signature.verify(signatureBytes);
    }
}

在这个示例中,我们使用Java的java.security包提供的RSA加密算法。generateKeyPair方法用于生成RSA密钥对,encrypt方法用于使用公钥加密数据,decrypt方法用于使用私钥解密数据,sign方法用于使用私钥对数据进行签名,verify方法用于使用公钥验证签名。

示例中使用的密钥长度为2048位。在实际应用中,可以根据安全性要求选择更长的密钥长度。文章来源地址https://www.toymoban.com/news/detail-639936.html

到了这里,关于【算法】Java实现RSA算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4.Java开源RSA/SM2非对称加密算法对比介绍

    前期内容导读: Java开源RSA/AES/SHA1/PGP/SM2/SM3/SM4加密算法介绍 Java开源AES/SM4/3DES对称加密算法介绍及其实现 Java开源AES/SM4/3DES对称加密算法的验证说明 非对称加密 主要是指 秘钥对 是非对称的(相对于 对称加密 而言),简单理解就是加密秘钥和解密秘钥不同,一般叫做公钥和私

    2024年02月14日
    浏览(46)
  • Java 中常见的加密算法,DES、3DES、AES、RSA

    加密算法是一种将数据转换为不可读形式的算法,以保护数据的机密性和完整性。加密算法被广泛应用于计算机网络、数据库、电子商务等领域,用于保护敏感数据的安全性,如用户密码、信用卡信息、医疗记录等。在 Java 中,有许多常见的加密算法,本文将对加密算法的基

    2024年02月03日
    浏览(56)
  • Java实现基于RSA的数字签名

    1、加密保证了数据接受方的数据安全性。加密的作用是防止泄密。 2、签名保证了数据发送方的数据安全性。签名的作用是防止篡改。 问题:在比特币中,怎么证明这个交易是你发布的? 这是就需要用到数字签名,数字签名大概可已描述为:用私钥加密,用公钥解密。发布

    2024年02月11日
    浏览(52)
  • RSA 公私钥加解密Java实现

    1.简单快速集成,饮用hutool工具包实现 1)引入hutool包 2) 制作好自己的rsa公私钥文件,通过openssl实现即可,直接放到resources下面  3)读取rsa文件,进行加解密实现,公钥加密,私钥解密,注意点都在里面注释了。 2.不借助工具,直接引用java security包实现功能 1)公私钥依然

    2024年02月10日
    浏览(42)
  • JAVA+Node/JavaScript 前后端通讯 RSA 加解密实现

    实际项目中,前后端或跨语言加密通讯的场景十分常见。这里以 Java 和 Node.js (兼容 浏览器 )两种开发语言为例,实现 RSA 加解密通讯。 此代码采用分段加解密,理论上支持无限长度的文本内容 使用示例:

    2024年02月07日
    浏览(48)
  • RSA加密解密(无数据大小限制,php、go、java互通实现)

    RSA加解密中必须考虑到的**长度、明文长度和密文长度问题。明文长度需要小于**长度,而密文长度则等于**长度。因此当加密内容长度大于**长度时,有效的RSA加解密就需要对内容进行分段。 这是因为,RSA算法本身要求加密内容也就是明文长度m必须0m**长度n。如果小于这个长

    2024年02月15日
    浏览(78)
  • 【华为OD机考 统一考试机试C卷】素数之积/RSA加密算法(C++ Java JavaScript Python C语言)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年03月21日
    浏览(46)
  • RSA加密算法Python实现

    1977年,三位数学家 Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法.RSA算法的特征如下: RSA算法是非对称加密算法,及算法的加密密钥与解密密钥不同 RAS是基于大数分解问题实现的算法, RSA算法的密钥长度一般为

    2024年01月18日
    浏览(44)
  • RSA加解密算法的简单实现

    就前不久完成的RSA加解密实现这一实验来水一篇文章 算法原理: 一.米勒拉宾素性检测算法 米勒-拉宾(MillerRabbin)素性测试算法是一个高效判断素数的方法。 其涉及到的原理如下:         1、费马小定理: 如果 p 为质数             (在 mod p 的情况下 )         2、

    2024年02月05日
    浏览(33)
  • RSA加密算法讲解及C++实现

    一.加密原理              二.C++实现 3.1实现加解密算法 加解密算法示例: 2.2实现pqed的生成 2.2.1找出质数P、Q  2.2.2计算公共模数N=P*Q  2.2.3欧拉函数F(N)=(P-1)*(Q-1)  2.2.4计算公钥E 2.2.5 计算私钥D 完整代码 此步骤讲解建立在了解欧拉函数等数学基础和密码学基础上的。 步骤

    2023年04月16日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包