精华内容
下载资源
问答
  • 非对称加密存在的问题
    2021-04-08 13:00:43

    分类

    一般分为:

    • 对称加密
    • 非对称加密

    对称加密

    加密和解密使用的是同一个密钥或者,两者可以互相推导得出,则认为是对称加密,如DES,AES,3DES

    在传输数据时用密钥将数据加密,然后将密文发给接收方,接收方再使用该密钥解密数据。这样就要求接收方需要知道密钥,如果接收方需要接受1万个用户的数据的话就需要知道1万个密钥,并且密钥容易泄漏。

    非对称加密

    加密和解密的密钥不同,且知道其中一个密钥不能得知另一个密钥,一般用来加密的密钥称作公钥,用来解密的密钥称作私钥,如RSA,ECC

    在需要传输数据给某用户时,就使用该用户的公钥对数据加密得到密文发给用户,用户用自己的私钥来解密密文得到数据 。

    两类加密的特点

    • 对称加密安全性差,但是效率高
    • 非对称加密安全性好,但是加密效率低

    结合使用

    在传输一个比较大的数据时,可以先用对称加密来加密数据,对称加密的密钥假如为X,再用非对称加密将X加密。

    举例

    凯撒密码

    凯撒密码是对称密码,其密钥是0-26的一个整数key,加密是将每个字母往后推移key个字母
    比如密钥为3,明文为a,则密文就是d

    代码实现-加密

    //加密
        public static String encryption(String txt,int key){
            if (key<0||key>26)
                return null;
            char[] result=txt.toCharArray();
            int intA=65;
            int inta=97;
            for (int i=0;i<result.length;i++){
                if (result[i]>'A'&&result[i]<'Z') {
                    result[i] =(char)(((int)result[i]+key-intA)%26+intA);
                }else if (result[i]>'a'&&result[i]<'z'){
                    result[i] =(char)(((int)result[i]+key-inta)%26+inta);
                }else;
            }
            return new String(result);
        }
    

    代码实现-解密

    //解密,调用加密的函数
        public static String decrypting(String txt,int key){
            if (key<0||key>26)
                return null;
            return encryption(txt,26-key);
        }
    

    main函数及文件加密

    public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
            int choose=0;
            System.out.println("加密输入1,解密输入2:");
            choose=scanner.nextInt();
            if (choose==1){
                System.out.println("输入密钥(0-26):");
                int key=scanner.nextInt();
                String pathname="/new/IdeaProjects/StudyTest/test.txt";
                String oriText=getFileText(pathname);
                String ciphertext=encryption(oriText,key);
                System.out.println(pathname+"加密完成!");
                System.out.println("使用密钥:"+key+"加密后得到密文为:");
                System.out.println(ciphertext);
                String pathname2="/new/IdeaProjects/StudyTest/ciphertext.txt";
                if (printToFile(ciphertext,pathname2)){
                    System.out.println("密文保存在:"+pathname2);
                    return;
                }else {
                    System.out.println("密文保存失败!");
                    return;
                }
            }else if (choose==2){
                System.out.println("输入密钥(0-26):");
                int key=scanner.nextInt();
                String pathname2="/new/IdeaProjects/StudyTest/ciphertext.txt";
                String cipherText=getFileText(pathname2);
                String oriText=decrypting(cipherText,key);
                System.out.println("使用密钥:"+key+"解密完成,明文为:");
                System.out.println(oriText);
    
            }else {
                return;
            }
        }
    
    //读文件
        public static String getFileText(String pathname){
            File file=new File(pathname);
            String str="";
            try {
                Scanner scanner = new Scanner(file);
                while(scanner.hasNext())
                {
                    str=str+" "+scanner.next();
                }
                scanner.close();
            } catch (FileNotFoundException e) {
                System.out.println("file not found.");
            }
            return  str;
        }
    
        //写文件
        public static boolean printToFile(String str,String pathname){
            File file = new File(pathname);// 要写入的文件路径
            if (!file.exists()) {// 判断文件是否存在
                try {
                    file.createNewFile();// 如果文件不存在创建文件
                    System.out.println("文件"+file.getName()+"已为您创建!");
                } catch (IOException e) {
                    System.out.println("创建文件异常!");
                    e.printStackTrace();
                    return false;
                }
            } else {
                System.out.println("文件"+file.getName()+"已存在!");
            }
    
    
            FileOutputStream fos = null;
            PrintStream ps = null;
            try {
                fos = new FileOutputStream(file,true);// 文件输出流	追加
                ps = new PrintStream(fos);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            String string  = str + "\r\n";// +换行
            ps.print(string); // 执行写操作
            ps.close();	// 关闭流
    
            return true;
        }
    
    更多相关内容
  • 一:对称加密 1:原理 通信双⽅使⽤同⼀个密钥,使⽤加密算法配合上密钥来加密,解密时使⽤加密过程的完全逆过程配合密钥来进⾏解密。 举个简单的例子: 按规则使⽤不同的⽂字来替换掉原先的⽂字来进⾏加密...

    一:对称加密

    1:原理

    通信双⽅使⽤同⼀个密钥,使⽤加密算法配合上密钥来加密,解密时使⽤加密过程的完全逆过程配合密钥来进⾏解密。

    举个简单的例子:

    按规则使⽤不同的⽂字来替换掉原先的⽂字来进⾏加密。
     
    码表:
    原始字符:ABCDEFGHIJKLMNOPQRSTUVWXYZ
    密码字符:BCDEFGHIJKLMNOPQRSTUVWXYZA
    
    原始书信:how are you
    加密书信:ipx bsf zpv
    解读后:  how are you

    加密算法:替换⽂字

    密钥:替换的码表

    以上的例子就是最简单的对称加密的实现。

    2:经典算法

    DES56 位密钥,密钥太短⽽逐渐被弃⽤)、AES128 位、192 位、256 位密钥,现在最流⾏)

    当然还有其他的算法,但这2种贵在金典。。

    3:对称加密作⽤

    加密通信,防⽌信息在不安全⽹络上被截获后,信息被⼈读取或篡改。

    4:对称加密的缺点

    密钥泄露:不能在不安全⽹络上传输密钥,⼀旦密钥泄露则加密通信失败

    二:非对称加密

    1:原理

    使⽤公钥(加密密钥)对数据进⾏加密得到密⽂;使⽤私钥(解密密钥)对数据进⾏解密得到原数据。公钥和私钥是不相同的,

                                                           图 2-1

    举个简单的例子(不用深究,但是足以体现非对称加密的最核心的原理,运用各种移位、溢出等算法):假如你遇到危险,这时候要发送个110求救,以防被截获咱们得给它加密一下

         原数据是: 110
             加密  +4  
    通过加密秘钥后: 554
             解密  +6和移位等
                    11 11 10
    通过解密秘钥后:   1  1  0

    2:使用场景

    进行网络通信,非对称加密是怎么做到可以在不安全的网络环境下进行安全的通信的呢

                                                                           图 2-2

    通信双方把加密秘钥给对方,然后双方怎么通信呢?图2-3中A通过B的加密秘钥加密数据后发给B,B就可以用B的机密秘钥进行解密,这样就实现的通信了。

           那像C也是可以获取到A、B的机密秘钥的,但是C没有A、B的解密秘钥,所以即使C获取的到秘文,也无法进行解密。但是C在拥有A/B的加密秘钥,那C不就可以冒充A、B进行传数据了吗,那要怎么保证传数据的那一方是实际数据来源方呢?在后面我们会进行讲解,继续往下

                                                                            图 2-3

                                                                            图 2-4

     图2-3和图2-4是一样的,从公钥的命名也可以知,公钥是可以公开的,但是私钥是一定要握在自己手上。很多时候公钥是可以通过私钥计算出来的,用的是椭圆曲线算法,比特币用的一种算法,所以如果拿到了私钥就等于同时拿到了公钥,可见私钥不能公开的必要性。

    公钥能不能解私钥?

    答案是能,可互相解

    签名和验证

    由于私钥和公钥互相可解,因此⾮对称加密还可以应⽤于数字签名技术。即用来证明发信息者的身份

                                                                         图 2-5

    图2-5原数据通过私钥加密后(签名),生成签名数据,那对方就可以通过对应的公钥进行解密(验证)。由于别人没有我的私钥,就无法造出我的数据,也就无法冒充我了

                                                                          图2-6                                              

    图2-6是比较标准的签名流程,会把原数据一起发送,这个是主要是为了验证方便

     加密+签名

     在实际的使用过程,常会对原数据hash以后对hash签名,然后附加在原数据的后⾯作为签名。这是为了让数据更⼩。

     加密+签名(完整)

    3:经典算法

    RSA(可⽤于加密和签名)、DSA(仅⽤于签名,但速度更快)

    三:Hash

    1:定义

    常会对原数据hash以后对hash签名,然后附加在原数据的后⾯作为签名。这是为了让数据更⼩。

    2:作⽤

    相当于从数据中提出摘要信息,因此最主要⽤途是数字指纹。

    3:实际用途

      数据完整性验证

    从⽹络上下载⽂件后,通过⽐对⽂件的Hash值(例如MD5、SHA1),可以确认下载的⽂件是否有损坏。如果下载的⽂件Hash值和⽂件提供⽅给出的Hash值⼀致,则证明下载的⽂件是完好⽆损的。

     唯⼀性验证

     如JAVA中验证,要重写hashCode()

    隐私保护

    当重要数据必须暴露的时候,有事可以选择暴露它的Hash值(例如MD5),以保障原数据的安全。

    例如⽹站登录时,可以只保存⽤户密码的Hash值,在每次登录验证时只需要将输⼊的密码的Hash值和数据库中保存的Hash值作⽐对就好,⽹站⽆需知道⽤户的密码。这样,当⽹站数据失窃时,⽤户不会因为⾃⼰的密码被盗导致其他⽹站的安全也受到威胁。

    加盐:由于彩虹表的存在,存储了很多常用密码对应的Hash值,这样就相当于破解了hash加密过的值,这时候加上一些自己特有的值一起hash,这样值就和直接Hash的值就不同了。

    快速查找

    HashMap

    经典算法

    MD5、SHA1、SHA256

    展开全文
  • 传统的非对称加密算法仅涉及两方:一方是发送方(加密器),另一方是接收方(解密器),其中每一方都有两个不同的密钥:私钥和公钥。 但是,如果将其应用在某些面向多方的环境中,则可能会存在一个严重的问题,即各...
  • 对称加密非对称加密

    千次阅读 2021-07-12 08:58:41
    1. 对称加密 加密和解密使用同一个秘钥,所以叫做对称加密。常见的对称加密算法:DES,AES等。 其过程可以描述为: 加密:原文 + 密匙 = 密文 解密:密文 - 密匙 = 原文 对称加密通常使用的是相对较小的密钥,一般...

    1. 对称加密

    加密和解密使用同一个秘钥,所以叫做对称加密。常见的对称加密算法:DESAES等。

    其过程可以描述为:

    • 加密:原文 + 密匙 = 密文
    • 解密:密文 - 密匙 = 原文

    对称加密通常使用的是相对较小的密钥,一般小于256 bit。如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off

    面临的最大的问题为:秘钥的分发。就是说,解密方如何获得加密方的秘钥呢?在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

    1.1 DES

    全称为Data Encryption Standard,即数据加密标准。1977年被美国联邦政府的国家标准局确定为联邦资料处理标准,并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。

    DES的密钥长度为64位,由于第n*8(n=1,2,…8)是校验位,因此实际参与加密的长度为56位,密钥空间含有2^56个密钥。

    DES算法是一种分组加密机制,将明文分成N个组,然后对各个组进行加密,形成各自的密文,最后把所有的分组密文进行合并,形成最终的密文。

    DES加密算法在计算机速度提升后的今天被认为是不安全的。(可破解)

    1.2 AES

    全称为Advanced Encryption Standard,即高级加密标准。又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES

    AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示:

    在这里插入图片描述

    2. 非对称加密

    非对称加密之所以不对称,指的就是加密用一个密钥,而解密的时候用的是另外一个密钥。公钥和私钥是一对,如果用公钥对数据加密,那么只能用对应的私钥解密。如果用私钥对数据加密,只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥,所以称为非对称加密。

    (1) A 要向 B 发送信息,A 和 B 都要产生一对用于加密和解密的公钥和私钥。
    (2) A 的私钥保密,A 的公钥告诉 B;B 的私钥保密,B 的公钥告诉 A。
    (3) A 要给 B 发送信息时,A 用 B 的公钥加密信息,因为 A 知道 B 的公钥。
    (4) A 将这个消息发给 B (已经用 B 的公钥加密消息)。
    (5) B 收到这个消息后,B 用自己的私钥解密 A 的消息。其他所有收到这个报文的人都无法解密,因为只有 B 才有 B 的私钥。

    上面流程来自博客:加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH)

    也就是说,在网上所传递的只是公钥,而对于传递的数据来说,一般都使用(对方)公钥加密、(自己)私钥解密,而私钥自由自己知道,故而可以保证信息不被破解

    虽然信息可以保证不被破解,但是因为其双方公钥公开,故而可以尝试伪造数据。也就是,报文在发送中途存在着被替换的风险,对于A而言我们需要确保这个数据确实是B发过来的,而这里就需要使用到数字签名

    2.1 数字签名

    我们知道hash算法不可逆,比如MD5。对于任意文件或者数据,我们都可以得到一个摘要,即hash值。

    首先可以A将要发送信息进行Hash函数,生成信件的摘要。再将摘要用私钥加密,这个加密后的摘要就是数字签名。注意数字签名是用私钥进行加密的,而不是用公钥。

    然后将发送信息和数字签名发给BB数字签名A的公钥解密进行解密,得到信件的摘要。再对发送信息使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。

    再用A的公钥对数字签名进行解密。然后将解密后的文件用hash得出摘要,再与数字签名的结果进行对比如果摘要相同,就证明是A发的。

    但这个对比是基于A已经确保收到的公钥确实是B的前提,但是这个过程如果存在一个中间人,也给A发送自己的公钥,那么如何确保A收到的就是B的公钥?(无法确定公钥是否真的属于目标对象。)

    2.2 数字证书

    显然,我们需要一种技术来确保发送发获取的公钥是目标对象的公钥。也就是:数字证书(Digital Certificate

    两人无法互相相信时,此时就需要一个权威的第三者,这是一个签发数字证书的权威机构,叫”证书中心"(certificate authority,简称CA)。

    要有这个机构的数字证书,不仅包括了公钥,还包括了域名签发机构有效期签名等,CA机构的认证很严格,跟我们的身份认证一样,因此可以相信。

    数字证书就像身份证,CA机构就是派出所。

    A作为服务器一端,需要把自己的证书给B看。然后BCA查看此证书是否是真实的。

    那么,如何确保这个CA不是第三方伪造的呢?

    答案是:直接把最权威的几个CA机构证书放到用操作系统中。其实,之后只需要使用信任链,即机构1说机构2可以信任,那我们就可以信任2,机构2说机构3信任,那我们就可以信任机构3。这样我们就可以信任很多个CA机构分发的证书了。

    2.3 常见的非对称加密算法

    常见的非对称加密算法有RSADSA

    2.3.1 RSA

    RSA 是一种目前应用非常广泛、历史也比较悠久的非对称秘钥加密技术,在1977年被麻省理工学院的罗纳德·李维斯特、阿迪·萨莫尔和伦纳德·阿德曼三位科学家提出,由于难于破解,RSA 是目前应用最广泛的数字加密和签名技术,比如国内的支付宝就是通过RSA算法来进行签名验证。

    它的安全程度取决于秘钥的长度,目前主流可选秘钥长度为 1024位、2048位、4096位等,理论上秘钥越长越难于破解。支付宝的官方文档上推荐也是2048位,当然更长的秘钥更安全,但也意味着会产生更大的性能开销。

    2.3.2 DSA

    Digital Signature Algorithm,数字签名算法,他是由美国国家标准与技术研究所(NIST)与1991年提出。和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快。


    3. 对比总结

    • 对称加密技术的优点加密一计算量小,速度。缺点是,加密方和解密方必须协商好秘钥,且保证秘钥安全,如果一方泄露了秘钥整个通信就会被破解,加密信息就不再安全了。
    • 非对称机密技术使用两个秘钥进行加解密,一个叫做公钥,一个叫做私钥,私钥自己来保管,公钥可以公开,使用公钥加密的数据必须使用私钥解密,反之亦然。非对称加密技术安全性更好,但性能更

    4. 混合加密

    前文提到了:

    • 对称加密运算快,但是秘钥的分发问题确是其难点;
    • 非对称加密运算慢,但是安全性能通过公私钥对、数字签名、数字证书等可以得到保证,但是速度慢;

    在混合加密机制中,交换密钥的环节使用非对称加密,之后的通信则使用对称加密

    也就是说只要保证了在对称加密中的密钥的安全性,就可以使用更加快速的对称加密技术来进行消息的通信。

    混合加密(hybrid encryption)是2018年全国科学技术名词审定委员会公布的计算机科学技术名词。

    具体的实现思路是先使用对称加密算法对数据进行加密,然后使用非对称加密算法对对称加密的密钥进行非对称加密,之后再把加密后的密钥和加密后的数据发送给接收方。


    Thanks

    展开全文
  • 散列加密、对称加密非对称加密、数字签名搞不懂?就这篇博客给你安排的明明白白

    密码学

    数据安全在日常开发中是一个非常重要,特别是在互联网的业务中,对于一些重要业务比如支付、转账、登录等都需要涉及到数据的安全,在互联网下所有传输的数据都可能会被抓取到,若重要数据未加密那么不法分子就可以抓取并且伪造假数据蒙骗过我们,最终照成损失

    密码学演变

    古典密码学

    密码学并不是近代产生的,在很早很早古人在传输书信的时候就已经用到了密码学了,这些早期的密码学称为古典密码学,古典密码学的核心原理为替换法、移位法

    替换法

    古代密码学中的替换法就是使用固定的信息,将原文替换成密文

    如:原文bee,将b替换成w,e替换p,得出密文wpp

    替换法的加密方式一般有2种 单表替换、多表替换

    单表替换

    单表替换表示原文只有一张对于的密文表

    表: b -> w e->p

    原文:bee

    密文:wpp

    多表替换

    单表替换表示原文有多张的密文表,由于涉及到了多个密文表所以需要使用到密钥标记每个字符从那个密文表中找,加密与解密时需要配合密钥完成

    表1:b -> f e -> a 表2:b -> t e-> c 表3:b -> r e -> g

    原文:bee

    密钥:213 表示b字符密文表是表2、e字符的密文表是表1、e字符密文表是表3

    密文:tag

    位移法

    移位法,是按照字母的方式进行的,就是将原文的字母进行偏移一定距离后得到密文,著名的加密算法就是恺撒加密

    加密规则:字母偏移2位

    原文:bee

    密文:dgg

    破解古典密码学

    频率分析法

    在这里插入图片描述

    近代密码学

    二战德国时期制作了恩尼格玛密码机,该加密方式其实运用的也是古典密码学,相比之前是人工加密而近代机械化了所以可加密的方式更加多可以更加复杂,恩尼格玛密码机最后被人工智能之父图灵破解了

    在这里插入图片描述

    现代密码学

    现代密码学则是我们日常开发中使用最广泛的密码学,加密方式分如下3种

    1. 散列函数也叫哈希函数,如:MD5、SHA-1、SHA-256
    2. 对称加密,特点:加密方式与解密方式,使用是同一把密钥
    3. 非对称加密,特点:有2把密钥,使用公钥加密必须使用私钥解密,或使用公钥加密必须使用私钥解加密

    ASCII编码

    ASCII是美国信息交换的标准代码,是基于拉丁文字母的一套电脑编码系统,主要用于显示现代英语和其它西欧语言,它是现今最通用的单字节编码系统

    在这里插入图片描述

    程序中使用ASCII

    编写一个简单的java程序,char类型默认编码格式使用的是ASCII字符

    在这里插入图片描述

    对称加密

    加密方式分2种

    • 序列密码(流加密):原文为123456,流加密就是将原文从左往右遍历按顺序一个一个字取出加密,最后拼接成密文

    • 分组密码(块加密):原文为123456,块加密则将按指定长度拆分多个块,不足的使用固定数值部位,然后分别对不同块加密,最后拼接成密文

    常见对称加密算法

    • DES,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定位联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,最后该算法在国际上广泛流传
    • AES,高级加密标准,在密码学中又称Rigndael加密法,是美国联邦政府采用的一种块加密标准,这个标准用来替代原先的DES,已经被多方分析并且广为全世界使用

    特点

    • 加密快,可加密大文件
    • 密文可逆,一旦密钥文件泄露,就会导致数据泄露
    • 加密后编码表找不到对应字符,出现乱码
    • 一般结合Base64使用

    DES加密/解密

    DES是一种对称加密的流加密,加密与解密都使用同一把密钥,DES的密钥必须8字符,加密/解密例子

    在这里插入图片描述

    测试

    在这里插入图片描述

    Base64

    可以在上面看到,我们使用到Base64,这里要说明一下Base64不是加密算法,是一种可读性算法,Base64的目的不是保护数据,是为了让数据可读,可看到大部分算法加密后显示都会产生乱码使用了Base64可以将这些乱码转为可读的字符串

    Base64组成是由64个字符组成分别是 A-Z、a-z,0-9,+和/

    Base58也是一个比较知名的编码方式,广泛运用在比特币里

    Base64与Base58区别,Base58没有数字0字母o,大写字母I,小写字母i,+和/

    ASE加密/解密

    ASE的加密与解密和DES是一样的步骤的不过,不同之处就是密钥必须是16位的

    在这里插入图片描述

    Cipher加密模式

    ECB

    ECB电子密码本,需要加密的消息按照块密码的块大小被分为数个块,然后对每一个块进行独立加密,最后拼接到一起

    优点:可以并行处理数据

    缺点:同样的原文生成同样的密文,不能很好的保护数据

    总结:可以多个块同时加密效率高,若块中原文一样那么加密出来的密文也是一样的,数据安全性较低

    CBC

    CBC密码块链接,每个明文块先与前一个密文块进行异或后,再进行加密这种加密方式中,每个密文块都依赖于它前面的所有明文块

    优点:同样的原文生成的密文不一样

    缺点:串行处理数据

    总结:加密数据满,不过安全性高

    Cipher填充模式

    NoPadding

    不填充

    使用该模式之需要再DES加密算法下,安装要求密钥必须是8byte的整数倍

    使用该模式之需要再AES加密算法下,安装要求密钥必须是16byte的整数倍

    PKCS5Padding

    数据块的大小为8位,不够就补足

    消息摘要

    消息摘要又称为数字摘要,它是一个唯一对应一个消息或者文本的固定长度的之,它是由单向Hash加密函数对消息进行加密产生的,使用数字摘要生成的值是不可篡改的,为了保证文件于值的安全

    特点:无论输入消息有多长,计算出来的消息摘要长度总是固定的,消息摘要是单向的、不可逆的

    应用场景

    在说应用场景是首先要明确的消息摘要的作用是用于保证文件的安全的,那么如何保证呢,平时我们去下载tomcat时都可以发现在下载安装包旁边防止一个sha512,其实这个就是你下载的tomcat安装包的一个消息摘要,你可以将下载好的tomcat做一个sha512可以发现和官方提供的是一致的,如果不一致那么你要注意了你下载的安装包可能已经被篡改了

    在这里插入图片描述

    常见算法

    • MD5
    • SHA1
    • SHA256
    • SHA512

    在这里插入图片描述

    非对称加密

    非对称加密又叫现代加密算法,非对称加密于对称加密最大的区别就是,非对称加密需要使用到2个密钥,公钥与私钥,规则是如果使用公钥加密那么必须使用私钥解密,如果使用私钥加密那么必须使用公钥解密

    常见的非对称加密算法

    1. RSA
    2. ECC

    公/私钥生成规则

    在java中KeyPairGenerator类是用于专门生成公钥与私钥的密钥对

    在这里插入图片描述

    封装成方法

    将密钥对生成封装一下方便以后的调用,并且在生成密钥对的时候把公钥与私钥都保存一份到文件中

    在这里插入图片描述

    私钥/公钥加密

    加密的话都需要使用到Cipher对象,在前面的对称加密中也讲过该对象如何使用,因为那公钥/私钥加密写的代码都是一样是,所有这里只演示使用私钥加密

    在这里插入图片描述

    封装成方法

    为了方便后面的调用,我们可以将加密封装成一个方法,由于公钥与私钥加密执行代码都是一样的所有只需要编写一个同一的加密方法即可

    在这里插入图片描述

    公钥/私钥解密

    解密的话需要看你使用什么密钥进行加密规则是私钥加密公钥解密、公钥加密私钥解密

    在这里插入图片描述

    封装成方法

    为了方便后面的调用,我们可以将解密封装成一个方法,由于公钥与私钥解密执行代码都是一样的所有只需要编写一个同一的加密方法即可

    在这里插入图片描述

    保存公钥/私钥

    在开发过程中通常是将公钥/私钥保存到一个文件中,不然每一次都要重新构建一个KeyPair对象很麻烦并且,每次构建的公钥/私钥也不一样,所有需要将生成好的密钥对保存下来这样才能重复使用

    在这里插入图片描述

    读取公钥/私钥

    保存到文件的密钥需要重新读取出来并且将读取的Base64字符串转换成正确的密钥对象才能使用

    读取公钥

    读取公钥只需要使用X509EncodedKeySpec对象将字符串构建回公钥对象即可

    在这里插入图片描述

    读取私钥

    读取私钥只需要使用PKCS8EncodedKeySpec对象将字符串构建回私钥对象即可

    在这里插入图片描述

    测试

    在构建完密钥对后不在通过对象获取了,而是通过读取文件的方式获取密钥对

    在这里插入图片描述

    数字签名

    学完非对称加密后,那么我们可以对我们的信息进行加密了并且由于加密是非对称的所有他人无法破解,但是这其中还是存在一个问题,既然黑客已经不能破解你的信息但是他可以伪造信息,比如你该隔壁老王发一个消息你使用了老王的公钥对信息进行加密,老王收到消息后使用自己的私钥解密,看似万无一失可是你的信息可能就会被掉包,在你把信息发出去后被隔壁小张截取了,然后他伪造了一个消息出来并且使用老王的公钥加密了发给老王,这样老王收到的就是错误消息了,那么如何解决这个问题呢?

    数字签名也叫公钥签名,只有信息的发布者才能产生别人无法伪造的一段数字串,有了数字签名那么可以保证信息是由信息发布者而发布的,别人是无法伪造的,你在要发给老王的消息中加上一个你的数字签名,这样老王收到可以核对该数字签名是不是你本人发送的

    生成签名

    在这里插入图片描述

    校验签名

    在这里插入图片描述

    测试

    在这里插入图片描述

    展开全文
  • 对称加密非对称加密体系

    千次阅读 2021-12-23 21:08:33
    这里写目录标题对称密钥密码体系非对称密钥密码体系RSA 对称密钥密码体系 对称密钥密码体系是指消息发送方和消息接收方必须使用相同的密钥,该密钥必须保密。发送方用该密钥对待发消息进行加密,然后将消息传输至...
  • 非对称加密工作原理

    千次阅读 2021-08-10 14:15:30
    非对称加密 非对称加密使用两个密钥,一个是public key,一个是private key。通过一个特殊的数学算法,使得数据的加密和解密使用不同的密钥。因为用的是不同的密钥,所以称为非对称加密非对称加密最著名的是RSA...
  • 在光学系统中,引入线性相位截断策略消除了线性对称密码系统存在的安全隐患。幅相调制技术结合相位截断运算实现单通道多图像加密,通过重复使用一组光电混合设备,5幅图像被加密为一个实值密文。相位保留运算产生与...
  • 非对称加密概述

    万次阅读 多人点赞 2018-07-29 16:16:15
    因此,我用了几天时间学习了密码学基础知识,尤其是非对称加密技术的原理。这里加以整理总结,本文只求通俗,必需涉及数学公式才能解释的部分只给出优质教程的链接,根据需求选择学习就好。 本文以一个一脸懵逼的...
  • 对称加密存在问题

    千次阅读 2019-11-29 09:40:08
    1、当通信对象很多时会面临众多秘钥的有效管理问题 2、对于一个新的数据通信对象,密钥怎样进行传输的问题 一、非对称加密介绍 非对称加密也叫公钥密码:使用公钥加密,使用密钥解密 ...
  • 在计算机信息安全领域,经常应用到MD5、对称加密非对称加密。在密码学的应用和研究中,DES、RSA、SHA等加密算法占据着重要的位置。随着人们对加密强度需求的不断提高,近期出现了很多加密算法,如AES、ECC等。那么...
  • 之前对非对称加密有很大的误解,可以说之前理解的非对称加密都是错误的,经过一位大牛的点拨 (碾压) 充分认识到了自己的错误~,现在重新对非对称加密做一个总结; 之前错误的想法 非对称加密 指的是 传输信息时 拥有公钥...
  • 1、DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合; 2、3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高; 3、RC2和...
  • 图表:在这篇博文中,我们讨论了对称加密(一种单密钥加密技术)与非对称加密(也称为公钥密码术)之间的区别,后者使用私钥和公钥对加密密钥。 传输密钥或不传输密钥。就是那个问题。 目前使用的数据加密主要有两种...
  • 对称加密算法和非对称加密算法

    千次阅读 2020-10-15 17:47:18
    对称和对称完美结合 非对称加密既然也有缺陷,那我们就将对称加密非对称加密两者结合起来,取其精华、去其糟粕,发挥两者的各自的优势: 如上图所示 第 ③ 步时,客户端说:(咱们后续回话采用对称加密吧,这是...
  • 文章目录对称加密对称加密的有优缺点密钥分配问题非对称加密对称加密的优缺点混合加密 上一章节我们说到解决窃听的方法是加密,这里我们来说说加密 对称加密   两边用同一个密钥来加解密。   A把明文通过某一...
  • 对称加密非对称加密再理解 文章目录对称加密非对称加密再理解一、对称加密...但是对称加密存在一个问题,就是如何保证秘钥传输的安全性,因为秘钥还是会通过网络传输的,一旦秘钥被其他人获取到,那么整个
  • 对称加密非对称加密以及数字签名和数字证书1、对称加密非对称加密1.1、对称加密(Symmetric Cryptography)1.1.1、定义1.1.2、特征1.2、非对称加密(Asymmetric Cryptography)1.2.1、定义1.2.2、特征1.3、对称...
  • 非对称加密RAS

    2022-04-25 20:17:41
    非对称加密RAS
  • 图文结合彻底理解非对称加密(公钥密钥)、RSA原理及安全性 前文详细讲解了对称加密及算法原理。那么是不是对称加密就万无一失了呢?对称加密有一个天然的缺点,就是加密方和解密方都要持有同样的密钥。你可以能会...
  • 目录 一、对称加密(Symmetric Cryptography) 优缺点 二、非对称加密(asymmetric Cryptography) ...非对称加密算法使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢,解决加密解密慢的...
  • 什么是对称加密算法?对称加密算法的优缺点?应用场景有哪些?非对称加密呢?
  • 对称加密】、【非对称加密】、【数字签名】和【数字证书】
  • 1. 加密技术可以分为对称与对称两种。 a.对称加密,解密,即加密与解密用的是同一把秘钥. b.对称技术,加密与解密用的是不同的秘钥 2.为什么进行加密 ...假设这样一种场景A要发送一...非对称加密与解密使用的是不...
  • 如何加密解密?...非对称加密(公钥密码) 加密用的密钥跟解密用的密钥不是同一把 对称加密(Symmetric Cryptography) ◼ 在对称加密中,加密、解密时使用的是同一个密钥 ◼ 常见的对称加密算法有 DES
  • 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥。信息接收双方都需事先知道密匙和加解密算法,且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密...
  • 非对称密码系统( asymmetric encryption)可为加解密或数字签名系统。由于加密或签名验证密钥是公开的,故称为公钥 (publickey),而解密或签名产生密钥是秘密的,故称为私钥(privatekey)。因为公钥与私 钥不同,且公钥与...
  • 对称加密非对称加密的区别

    千次阅读 2019-11-07 11:08:53
    非对称加密如下图: 例如:“屌丝”要给“高富帅”传输数据,屌丝的加密密码为“123”,此时通过加密工具(RSA)生成一个公钥A和私钥A,“高富帅”也一样生成一个公钥B和私钥B,“屌丝”会用对方的公钥B和自己...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,203
精华内容 22,881
关键字:

非对称加密存在的问题