精华内容
下载资源
问答
  • 公开秘钥算法
    2022-04-15 10:42:55

    公开密钥加密也称为非对称密钥加密,该加密算法使用两个不同的秘钥:加密秘钥和解密密钥。前者公开,又称公开密钥,简称公钥。后者保密,又称私有密钥,简称私钥。这两个密钥是数学相关的,用某用户加密秘钥加密后所得的信息只能用该用户的解密密钥才能解密。RSA SM2

    更多相关内容
  • RSA公钥秘钥算法

    万次阅读 2018-10-25 17:57:46
    RSA公钥秘钥算法RSA公钥密钥算法总结RSA是什么?RSA算法原理RSA算法模拟RSA的应用:数字签名RSA算法的缺点 RSA公钥密钥算法总结 RSA算法既能用于数据加密也能用于数字签名,它是素数的典型应用。 RSA是什么? 计算机...

    RSA公钥密钥算法总结

    RSA算法既能用于数据加密也能用于数字签名,它是素数的典型应用。

    RSA是什么?

    计算机的加密技术分为对称加密和非对称加密两类。在对称加密中,信息的加解密使用同一秘钥key,其可简化加解密的过程,较为简单,但不足之处在于由于加解密使用同一个key,信息传送双方都要接触这个key,密钥key更容易泄露。在公开密钥加密即非对称加密中,密钥分为公钥PK(发送方通过PK对数据加密,然后发送给接收方,PK可公开),私钥SK(SK解密方保存,接收方通过SK对密文解密,SK不公开)。RSA公钥密码体制是最具代表性的非对称加密方式。

    RSA算法原理

    RSA定理:若P和Q是两个相异质数,另有正整数D和E,其中E的值与
    (P-1)(Q-1)的值互质,并使得DE%(P-1)(Q-1)=1,有正整数M,且M<PQ,设:
    C=ME%PQ,B=CD%PQ,则有M=B。

    • 生成公钥和密钥
      • 随意选择两个大的素数P和Q,且P不等于Q
      • 令N=PQ
      • 令T=(P-1)(Q-1)
      • 选择一个整数E,作为一个密钥,使E与T互质(即E与T的最大公约数为1),且E必须小于T
      • 由公式DE%T=1,计算得到D的值,作为另一密钥
      • 将(N,E)作为公钥,(N,D)作为私钥,当然也可互换。
    • 用公钥加密信息
      发送方收到公钥(N,E)后,通过公钥对数据进行加密,操作如下:
      • 明文:M
      • 加密:ME%N=C
      • 密文:C
    • 用私钥解密信息
      接收方收到密文C后,通过私钥(N,D)进行解密,得到明文M,操作如下:
      • 密文:C
      • 解密:CD%N=M
      • 明文:M

    RSA算法模拟

    为了计算方便,选取较小素数

    • 生成公钥和密钥
      • 取P=11,Q=13
      • 令N=PQ=11*13=143
      • 令T=(P-1)(Q-1)=10*12=120
      • 取E=7
      • 由公式DE%T=1,D*7%120=1得:D=103
      • (143,103)作为公钥,将(143,7)作为私钥。
    • 用公钥加密信息
      • 明文:取M=2
      • 加密:ME%N=C,2103%143=63
      • 密文:C=63
    • 用私钥解密信息
      • 密文:C=63
      • 解密:CD%N=M,637%143=2
      • 明文:M=2

    RSA的应用:数字签名

    数字签名是实现安全的核心技术之一,它的实现基础就是RSA加密技术,它是RSA的典型应用。
    以往的书信或文件是通过亲笔签名或印章证明其真实性的,但在计算机网络中,要解决报文的验证问题,就要使用数字签名,其必须保证以下几点:

    • 接受者能够核实发送者对报文的签名
    • 发送者事后不能抵赖对报文的签名
    • 接受者不能伪造对报文的签名
      在现有的多种实现数字签名的方法中,采用公开秘钥算法比常规算法更容易实现。
      采用RSA实现数字签名的过程:
      发送者A用其私钥SKA对报文M进行运算,将结果DSKA(M)发送给接受者B。
      接受者B用已知的A的公钥得出EPKA(DSKA(M))=M。
      因为除了A没人有A的私钥SKA,所以除了A没有人能产生密文DSKA(M),这样,报文M就被签名了。用私钥加密的报文发给对方,对方只能用持有的公钥解密,这样就实现了核实发送者对报文的报文的签名。
      如果发送者A要抵赖曾经发送过报文M给用户B,则用户B可将M和DSKA(M)出示给第三方监管机构,第三方很容易用公钥PKA去证实A确实发送报文M给用户B。反之,若用户B将M伪造为M,则用户B就不能在第三方面前出示DSKA(M),这样就证明了用户B伪造了对报文M的签名。由此,可看出,实现数字签名的同时也实现了对报文来源的鉴别。

    RSA算法的缺点

    再强的加密算法,也有被破解的一天。RSA算法是被研究得最广泛的公钥算法,从提出到现在经历了各种攻击,被普遍认为是目前最优秀的公钥方案之一。
    RSA的缺点主要有两点:

    • 产生密钥很麻烦,由于素数产生技术的限制,难以做到一次一密。
    • 分组长度太大,为保证安全性,N至少要600bit二进制位以上,运算代价高,速度慢。RSA算法的安全性依赖于大数分解,对于一个大数N,没有有效的方法能够将其分解,从而在已知(N,D)的情况下,无法获得E,同样在已知(N,E)的情况下无法求得D。目前,SET协议中要求CA采用2048bit二进制位长的密钥,其他实体使用1024比特的密钥。现在小于1024比特的N已被证明是不安全的,因此不应使用小于1024比特的RSA,最好使用2048位的N。
    展开全文
  • 文章目录git下载与配置公开秘钥算法git常用命令 git下载与配置 关于git的下载,去官网下载好安装包,直接安装即可。配置中会用到下面的命令。 # global为全局参数,表示本地所有仓库都会用到这个配置 git config --...

    git下载与配置

    关于git的下载,去官网下载好安装包,直接安装即可。配置中会用到下面的命令。

    # global为全局参数,表示本地所有仓库都会用到这个配置
    git config --global user.name "yourname"   
    git config --global user.email "your_email@youremail.com"
    

    公开秘钥算法

    最后的最后,记一下最近了解的和git配置公钥私钥有关系的公开秘钥算法
    简单用一句话来说就是

    加密秘钥和解密秘钥是不同的。并且从加密秘钥不能得到解密密钥。

    说的科学严谨点就是

    记加密算法为E,解密算法为D,要加密的数据为P。满足:
    1.D(E(P))= P
    2.从E导出D非常困难
    3.破译者即使能加密任意的选择明文,也无法破译密码。
    满足以上三个条件,则加密算法可以完全空开。

    在这种算法中,每个用户都有两个密钥,其中加密秘钥是供向他人发送报文用的,这是公开的。解密密钥是用于对收到的密文进行解密的,这是保密的。

    在实际应用中,有个较好的算法是MIT一个研究小组所提出的RSA算法。
    我简单的用代码实现了一下整个流程,如下:

    /*RSA算法基于简单的数论事实:将两个大质数相乘十分容易,但是想要
    对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。*/
    
    #include<iostream>
    using namespace std;
    // <1> 选择两个大素数p, q (一般实际中超过几百位的10进制数)
    // <2> 计算 n = p*q, z = (p-1)*(q-1)
    // <3> 选择一个与z互质的数,令其为d
    // <4> 找到一个e是的e*d=1(mod z)
    // 理论上的推到可借助欧拉函数 
     
    /*在一个安全实现中,Huge 最少要400位10进制数字*/
    typedef unsigned long Huge; 
    
    /*为RSA公钥定义一个数据结构,*/
    typedef struct RsaPubKey{
        Huge e;
        Huge n;
    }RsaPubkey;
    
    /*为RSA私钥定义一个数据结构*/
    typedef struct RsaPriKey{
        Huge d;
        Huge n;
    }RsaPriKey;
    
    // 加密过程就是 C = P的e次方mod n,解密就是P = C的d次方mod n 
    static Huge modexp(Huge a, Huge b, Huge n){
        Huge y;
        /*使用二进制平方乘法计算 pow(a,b) % n*/
        y=1;   
        while(b != 0)
        {
            /*对于b中的每个1,累加y*/        
            if(b & 1)
                y = (y*a) % n;  
            /*对于b中的每一位,计算a的平方*/
            a = (a*a) % n;       
            /*准备b中的下一位*/
            b = b>>1;  
            }
        return y;
    }
    
    /*rsa_encipher RSA算法加密*/
    Huge rsa_encipher(Huge plaintext, RsaPubKey pubkey){
    	Huge ciphertext;
        ciphertext = modexp(plaintext, pubkey.e, pubkey.n);
        return ciphertext;
    }
    /*rsa_decipher RSA算法解密*/
    Huge rsa_decipher(Huge ciphertext, RsaPriKey prikey){
    	Huge plaintext;
    	plaintext = modexp(ciphertext, prikey.d, prikey.n);
        return plaintext;
    }
    
    int main(){
    	/*此处做一个简单演示 设p = 17, q = 11。则n = 187,z=160
        13与z=160互质,所以d可以为13,13*e = 1(mod z) 经计算选择
    	e = 37 。所以公钥为(37,187) 私钥为(13,187)*/ 
    	RsaPubKey pubkey;
    	RsaPriKey prikey;
    	pubkey.e=37;
    	pubkey.n=187;
    	prikey.d=13;
    	prikey.n=187;
    	/*这里要注意实际中明文转为的比特串要划分为一个个的数据块 
    	进行加密。这里为了方便直接就一个数据块。这个数据块的大小有限制
    	数据块的大小范围:      0<=P<=n
    	如果为比特串,比特串的长度k的最大值满足:  2的k次方小于n*/ 
    	Huge plaintext = 88; 
    	Huge cipher = rsa_encipher(plaintext,pubkey);
    	cout<<"加密后的密文:"<<cipher<<endl;
    	Huge plain = rsa_decipher(cipher,prikey);
    	cout<<"解密后的明文:"<<plain<<endl;
    }
    

    同时,也应当知道,RSA算法虽然安全方便,但是其运行速度较慢,因而通常只用来进行用户认证,数字签名或者发送一次性的密钥。数据加密仍使用密钥算法。

    git重点知识简介

    • git本地仓库是由git维护的三个部分组成:
    1. 工作目录: 含有实际文件
    2. 暂存区: 类似于缓存区域,临时保存你的改动
    3. HEAD: 类似于指针,指向你最后一次提交的结果

    例如执行

    git add filename                 操作是将实际文件修改添加到暂存区
    git commit -m "info"             将改动提交到本地的head 但是还没到远程仓库
    git push origin master           可以将master换成任何你想要推送的分支
    
    • GitHub远程仓库中分支与主支
      分支和主支的区别,你可以理解为就是,分支是自己私人的空间,别人没办法看到和修改,主支大家都可以看到和修改。
      关于这块的详细解释,推荐一篇教程:
      GitHub分支管理
      分支是用来将特性开发绝缘开来的。 在你创建仓库时,master
      是"默认的"分支,也即主分支
      ,串起来开始到现在git仓库的时间线
    1. 创建分支并切换
      $ git checkout -b newbran # -b参数表示创建并切换
      Switched to a new branch ‘newbran’
      以上这步也可这么分步执行
      $ git branch newbran
      $ git checkout newbran
      Switched to branch ‘newbran’
    2. 合并到主支:
      $ git merge newbran
      git merge命令用于合并指定分支到当前分支。
    3. 删除分支
      $ git branch -d newbran

    注:

    1. git branch命令用于查看当前分支情况
    2. git最新版本提供了git switch命令来切换分支更容易理解。
    • 标签管理
      git中还有一个很方便的东西,叫做标签管理。详细介绍可去看详细教程。这里列出常用命令
    1. git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;

    2. git tag -a -m "blablabla…"可以指定标签信息;

    3. git tag可以查看所有标签。

    4. git push origin 可以推送一个本地标签;

    5. git push origin --tags可以推送全部未推送过的本地标签;

    6. git tag -d 可以删除一个本地标签;

    7. 命令git push origin :refs/tags/可以删除一个远程标签。

    几个要知道的命令:
    git status命令可以查看仓库当前的状态
    git diff 查看difference,也就是到底哪里被修改了
    git checkout – 可以丢弃工作区的修改
    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
    (最新版本提供了新的git switch命令)。
    git reset HEAD 暂存区的修改撤销掉(unstage)
    git当中的后悔药=— git reflog 在本地的仓库里执行会显示你执行的所有命令
    git rm filename 删除文件
    git reset --hard id 根据 id 回退到指定的版本

    一个曾出现过的error

    git解决error: The following untracked working tree files would be overwritten by checkout

    (git bash中执行)git clean -d -fx

    git clean 参数

    -n 显示将要删除的文件和目录;
    
    -x -----删除忽略文件已经对git来说不识别的文件
    
    -d -----删除未被添加到git的路径中的文件
    
    -f -----强制运行
    
    git clean -n
    
    git clean -df
    
    git clean -f
    
    展开全文
  • 1.设计公钥(e,n)和私钥(d,n) p=5,q=7 n=pq=57=35 f(n)=(p-1)(q-1)=46=24 取e=5,则ed≡1mod(n) (≡表示式子两边同余) 即5d≡1mod24 已知1mod24余数为1,要使5*dmod24余数为1,d的一个取值为5 ...

    1.设计公钥(e,n)和私钥(d,n)
    p=5,q=7
    n=pq=57=35
    f(n)=(p-1)(q-1)=46=24
    取e=5,则ed≡1mod(n) (≡表示式子两边同余)
    即5
    d≡1mod24
    已知1mod24余数为1,要使5*dmod24余数为1,d的一个取值为5
    所以得公钥KU=(e,n)=(5,35)
    私钥KR=(d,n)=(5,35)
    2.字母数字化
    查表可知 bed用数字表示为 02,05,04。
    3.明文加密
    使用公钥(5,35)对明文加密,由C≡Me(mod n)计算得32,10,09。
    4.密文解密
    使用私钥(5,35)对密文解密,由M≡Cd(mod n)计算得02,05,04
    查表得原文为bed。

    展开全文
  • RSA加密算法是最常用的非对称... RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年......
  • RSA秘钥算法

    2016-08-30 17:27:03
    RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好... RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rive
  • DH交换秘钥算法

    千次阅读 2018-05-07 08:11:27
    参考博客:https://blog.csdn.net/zzminer/article/details/8571289在SSL/TLS协商秘钥过程中,一般会采取两种算法:RSA和DH。RSA算法主要是通过公钥证书和私钥证书来进行加解密。当服务端向客户端发送Certificate...
  • DH秘钥交换算法

    千次阅读 2018-08-29 09:49:14
    选取两个大数p和g并公开,其中p是一个素数,g是p的一个模p本原单位根(primitive root module p),所谓本原单位根就是指在模p乘法运算下,g的1次方,2次方……(p-1)次方这p-1个数互不相同,并且取遍1到p-1;...
  • 算法没有公开。SM7适用于非接IC卡应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通、公交一卡通)。
  • 公钥加密应用--数字签名

    千次阅读 2022-04-10 21:10:16
    DSA 签名算法 ECDSA SM2签名
  • 下面算法中,不属于公开密钥加密算法的是()。D A.ECC B.DSA C.RSA D.DES 常用的公钥加密算法有RSA、DSA、ElGamal和ECC。 常用的对称加密算法有DES、3DES、IDEA、AES、Blowfish、Twofish和RSA公司的RC系列算法...
  • mbedtls系列文章 ...mbedtls | 04 - 对称加密算法的配置与使用(AES算法) mbedtls | 05 - 消息认证码的配置与使用(HMAC算法、GCM算法) mbedtls | 06 - 非对称加密算法的配置与使用(RSA算法) mbe
  • 密码学的基本概念 密码编码:通过信息编码使信息保密 密码分析:用分析方法... ...加密(encrypt,encryption),解密(decrypt,decryption) 密码算法(Algorithm),密码(Cipher):用来加密和解密的数学...
  • 公开密钥加密算法

    千次阅读 2021-05-22 22:43:57
    公开密钥加密(public-key cryptography),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。 常见的公钥加密算法有:...
  • 前段时间,在做 https 的协议解密工作,所以对公开密钥算法等有了初步的了解,用本篇文章梳理下,参考《深入浅出HTTPS从原理到实践》,学习https必备的好书,内容很详实,推荐!一...
  • 国密算法(SM2)简介及SM2生成秘钥

    万次阅读 2021-08-26 13:38:53
    国密算法(SM2)生成秘钥一、国密算法介绍二、SM2算法和RSA算法比较三、生成SM2秘钥1、openssl生成SM2秘钥1.1、安装openssl1.2、生成SM2私钥1.3、生成SM2公钥2、nodejs:使用sm-crypto包生成SM2秘钥3、c++生成秘钥...
  • 总结公开密钥RSA算法

    千次阅读 2019-12-09 18:12:46
    与之对应还有一种非对称加密算法,即加密和解密使用不同的密钥,非对称密钥我比较喜欢叫公开密钥算法,因为公开密钥中使用的密钥是一对的,分为公钥和私钥两部分,其中公钥是可以公开的,私钥则不公开,通常由密钥对...
  • 浅析RSA加密算法

    2021-05-29 15:23:25
    RSA加密算法是目前最广为使用的一种非对称加密算法(又称公开密钥加密算法)。 相对于对称加密算法,非对称加密算法是一种加密密钥和解密密钥不同的加密算法,是一种“由已知加密密钥推导出解密密钥在计算上是不可行...
  • 这种加密方法最重要的就是选取合适的密钥,一旦密钥被公开,保密性也就无从谈起。结合virginia加密原理,给出使用python实现的代码 plainText = ...
  • mbedtls系列文章 ...mbedtls | 04 - 对称加密算法的配置与使用(AES算法) mbedtls | 05 - 消息认证码的配置与使用(HMAC算法、GCM算法) mbedtls | 06 - 非对称加密算法的配置与使用(RSA算法) De
  • 由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。 SM3 消息摘要。可以用MD5作为对比理解。该算法公开。校验结果...
  • 由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。 SM3 消息摘要。可以用MD5作为对比理解。该算法公开。校验...
  • 对称秘钥与公共秘钥的区别

    千次阅读 2017-08-20 10:19:12
    1、对称秘钥 定义:消息发送方和消息接收方必须使用相同的密钥,该密钥必须保密。发送方用该密钥对待发消息进行加密,... 常见算法:DES、AES等 2、公共秘钥(非对称秘钥) 定义:使用两个密钥,一个公共密钥PK和一个
  • 对称密钥算法是什么

    2022-06-02 12:50:58
    对称密钥算法(Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类...与公开密钥加密相比,要求双方获取相同的密钥是对称密钥加密的主要缺点之一。 对称密钥算法 Symmetric-key al...
  • 密钥加密算法

    千次阅读 2021-05-07 13:29:37
    利用密钥加密算法来对通信的过程进行...由于加解密算法公开的,因此在这过程中,密钥的安全传递就成为了至关重要的事了。而密钥通常来说是通过双方协商,以物理的方式传递给对方,或者利用第三方平台传递给对方,一旦
  • Diffie-Hellman秘钥交换算法到Oakley密钥算法
  • 1、国密算法介绍 国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。...由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位
  • 由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。 SM3 消息摘要。可以用MD5作为对比理解。该算法公开。校验结果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,078
精华内容 3,231
关键字:

公开秘钥算法