前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RSA非对称加解密原理及示例代码

RSA非对称加解密原理及示例代码

作者头像
十毛
发布2021-06-22 20:09:24
7120
发布2021-06-22 20:09:24
举报

RSA非对称加解密可以实现安全传输,本文简单介绍一下其原理和实现代码

RSA加密算法

RSA加密算法是一种非对称加密算法,所谓非对称,就是指该算法加密和解密使用不同的密钥,公钥加密、私钥解密(加密信息)或者私钥加密、公钥解密(证书)。

RSA算法原理

  • 加密
代码语言:javascript
复制
 密文 = 明文^E mod N
  • 解密
代码语言:javascript
复制
明文 = 密文^D mod N

其中(E, D, N)就是秘钥对,E(Encryption) 表示加密,D(Decryption) 表示解密,N(Number)表示加解密共同用到的大数

秘钥生成
  • 求N
代码语言:javascript
复制
N= p * q ;p,q为质数
  • 求L
代码语言:javascript
复制
L=lcm(p-1,q-1) ;L为p-1、q-1的最小公倍数
  • 求E
代码语言:javascript
复制
1 < E < L,gcd(E,L)=1;E,L最大公约数为1(E和L互质)
  • 求D
代码语言:javascript
复制
1 < D < L,E*D mod L = 1

演示算法(秘钥生成&加解密)

代码语言:javascript
复制
public class App {
    public static void main(String[] args) {
        //设置两个互质数的初始值,为了简化运算,设置为17和19
        long p = 17;
        long q = 19;
        
        //计算公钥对(E,N)
        long N = p * q;
        long L = ArithmeticUtils.lcm(p - 1, q - 1);
        long E = 0;
        for (int i = 2; i < L; i++) {
            if (ArithmeticUtils.gcd(i, L) == 1) {
                E = i;
                break;
            }
        }
        System.out.printf("公钥=(E, N) = (%d, %d)%n", E, N);

        //计算私钥对(D,N)
        long D = 0;
        for (int i = 2; i < L; i++) {
            if (E * i % L == 1) {
                D = i;
                break;
            }
        }
        System.out.printf("私钥=(D, N) = (%d, %d)%n", D, N);

        //使用秘钥对完成加解密,随机生成一个原文数字
        long src = (long) (new Random().nextDouble() * (N - 1));

        //加密后的密文
        long cipher = ArithmeticUtils.pow(src, (int) E) % N;

        //反向解密
        BigInteger pow = ArithmeticUtils.pow(BigInteger.valueOf(cipher), BigInteger.valueOf(D));
        int src2 = pow.mod(BigInteger.valueOf(N)).intValue();

        System.out.printf("加密:原文: %d, 密文= (原文的E次方) mod N = (%d ^ %d) mod %d=%d%n",
                src, src, E, N, cipher);

        System.out.printf("解密:密文: %d, 原文= (密文的D次方) mod N = (%d ^ %d) mod %d=%d%n",
                cipher, cipher, D, N, src2);
    }
}

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RSA加密算法
  • RSA算法原理
    • 秘钥生成
      • 演示算法(秘钥生成&加解密)
      • 参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档