RSA算法golang实现lite版本

原创 2018年04月16日 16:48:00

简单golang的rsa实现


RSA分为以下几步

  • 生成公私钥
  • 加密
  • 解密

cmd-markdown-logo


生产公私钥

公钥{e,n}用来加密使用,私钥{d,n}用来解密使用。

1. 生成一个质数

golang自带随机生成质数的一些工具方法。

func NewPrime(c int) *big.Int {
    p1, err := rand.Prime(rand.Reader,c)
    if err != nil {
        fmt.Println("error:", err)
        return nil
    }
    return p1

}

2. 计算N,N是两个随机质数的乘积

N=P1P2

3. 计算E,E是一个奇数,不同与φ(N)的公因数(K为随机数)

DE=1modN
DE=Kφ(N)+1
E=(Kφ(N)+1)/D
所以需满足
0=(Kφ(N)+1)modE

func RandExponent(q *big.Int,k int,c int64) *big.Int{
    c = 1
    b := make([]byte, c)
    rand.Read(b)
    e := new(big.Int).SetBytes(b)
    r := new(big.Int).GCD(nil, nil, e, q)
    t := time.Now();
    for true {
        if r.Int64() == 1 && e.Int64() != 1{
            mod :=  new(big.Int).SetBytes(q.Bytes())
            mod.Mul(mod,big.NewInt(int64(k)) )
            mod.Add(mod,big.NewInt((1)))
            mod.Mod(mod,e)
            if mod.Int64() == 0 {
                fmt.Printf("e = %v  speed %v \n",e,time.Now().Sub(t))
                return e
            }
        }
        b = make([]byte, c)
        rand.Read(b)
        e = new(big.Int).SetBytes(b)
        r = new(big.Int).GCD(nil, nil, e, q)

    }
    return nil
}

4. 计算D,E计算出来再算D很简单了

D=(Kφ(N)+1)/E

 d := big.NewInt(1).Mul(k,q) //q为φ(N)
 d.Add(d,big.NewInt(1))
 d.Div(d,e)

由上面4步,公私钥生成完成

加密

c=mEmodN

 c := big.NewInt(0).SetBytes([]byte(m))
 BigPow(c,e)
 c.Mod(c,n)

解密

m=cDmodN

s := big.NewInt(0).SetBytes(c.Bytes())
BigPow(s,d)
s.Mod(s,n)

github地址:https://github.com/davewang/go-rsa-lite.git


禁止转载,谢谢!

golang集锦——如此优雅

这段教程假设你已经懂了golang的基础知识了,想学点好玩的东西,还有golang使用过程中必须要学的一些功能组件。
  • 2017年10月11日 17:25

RSA算法的Java实现

  • 2015年03月30日 22:18
  • 77KB
  • 下载

RSA算法C++实现源码

  • 2016年11月01日 15:40
  • 6KB
  • 下载

RSA算法Java的简单实现

RSA简介 RSA算法据说是目前地球上最重要的加密算法。维基百科是这么介绍的:“对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人...
  • he_qiao_2010
  • he_qiao_2010
  • 2015-03-30 22:07:40
  • 5177

RSA算法实现程序(原创java)

  • 2008年06月02日 21:10
  • 2KB
  • 下载

RSA算法的c++实现(简化版)

#include #include #include using namespace std; //encrypt void encrypt(char *str,int pk,int n,int *a...
  • wjy1025104554
  • wjy1025104554
  • 2016-11-15 10:30:40
  • 1435

JAVA实现RSA算法

1.关于RSA算法,主要就是要掌握好公钥和私钥的使用。首先,公钥是由N,E组成,私钥由N,D组成。那个下面我,先将java生成密钥对的方法写出来: public void createRsaKeyP...
  • zhouy6020975
  • zhouy6020975
  • 2017-04-20 17:42:17
  • 563

C语言实现的RSA算法程序

源程序来自Gethub的Simple implementation of the RSA algorithm。 程序中有关类型转换代码略做修改,并且已经能够编译运行。 程序如下: #include ...
  • tigerisland45
  • tigerisland45
  • 2016-05-23 10:00:12
  • 4267

MATLAB实现RSA算法

RSA算法RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的...
  • weixin_37610397
  • weixin_37610397
  • 2017-12-20 23:25:16
  • 151

25行代码实现完整的RSA算法

25行代码实现完整的RSA算法   网络上很多关于RSA算法的原理介绍,但是翻来翻去就是没有一个靠谱的算法实现,即使有代码介绍,也都是直接调用JDK或者Python代码包中的API实现,或者即使有代...
  • bian_h_f612701198412
  • bian_h_f612701198412
  • 2018-02-24 10:20:35
  • 1158
收藏助手
不良信息举报
您举报文章:RSA算法golang实现lite版本
举报原因:
原因补充:

(最多只允许输入30个字)