python字符串加密算法,非对称加密原理怎么算,python 非对称加密

  python字符串加密算法,非对称加密原理怎么算,python 非对称加密

  从DH算法可以看出,由公钥和私钥组成的密钥对是一种非常方便的加密方法。公钥是公开的,私钥是完全保密的,这就为非对称加密奠定了基础。

  不对称加密意味着加密和解密不使用同一个密钥。只有一对相同的公钥和私钥才能被成功解密。

  所以,如果要对drdqt发送给cmdld的文件进行加密,必须先向cmdld请求她的公钥,然后用cmdld的公钥进行加密,将加密后的文件发送给cmdld。这个文件只能用cmd液晶屏的私钥解决。cmd LCD的私钥在她自己手里,除了cmd LCD没有人能解锁这个文件。

  典型的加密算法是RSA算法,由罗恩里维斯特、阿迪萨莫尔和伦纳德阿德曼发明,所以用他们三个姓氏的首字母代表。

  非对称加密相对于对称加密的一个明显优势是,对称加密需要协商密钥,而非对称加密可以安全地公开每个公钥。人与人之间的通信:使用非对称加密需要n个密钥对,每个人必须只管理自己的密钥对。另一方面,使用对称加密需要n*(N-1 )/2个密钥,所以每个人需要管理N-1个密钥,管理难度大,容易泄密。

  既然非对称加密这么好,难道不能放弃对称加密,完全用非对称加密吗?不会吧。非对称加密的缺点是运算速度很慢,比对称加密慢很多。

  因此,在实践中,不对称加密总是与对称加密一起使用。假设drdqt需要将加密文件传输到cmdld。他们首先交换公钥,然后。

  Drdqt生成随机AES密码,用cmdld的公钥用RSA加密,发送给CMDLD;

  Cmdld用自己的RSA私钥解密,获得AES密码;

  使用共享的AES密码通过AES加密通信。

  可以看出,非对称加密实际上应用于第一步,即“AES cipher”加密。这也是浏览器中常见的HTTPS协议惯例。也就是说,浏览器和服务器首先通过RSA交换AES密码,然后双方的通信实际上使用的是高速的AES对称密码,而不是低速的RSA非对称密码。

  Java标准库提供了RSA算法的实现。示例代码如下:

  导入Java . math . big integer;

  导入Java . security . *;

  导入javax . crypto . cipher;

  -

  类别所有者{

  publistaticvoidmain(string[]args)引发异常{)。

  //明文:

  byte[] plain=你好,encryptuseRSA 。GetBytes( utf-8 );

  创建//公钥/私钥对:

  人民主动烟草=新人( wsdmz );

  用wsdmz的公钥加密:

  byte[]PK=active tickets . get public key(;

  system . out . println(string . format(公钥:% x),newbiginger (1,pk)))

  Byte[] encrypted=活动香烟。加密(普通;

  system . out . println(string . format(加密3360 % x),new bigin integer(1,加密) )

  用wsdmz的私钥解密:

  byte[]sk=active tickets . getprivatekey(;

  system . out . println(string . format(私钥:% x),new bigin integer(1,sk))

  Byte[]解密=主动香烟。解密(加密;

  System.out.println(新字符串(已解密, UTF-8 ));

  }

  }

  类别{

  字符串名称;

  //私钥:

  密钥sk;

  //公钥:

  公钥PK;

  Public(字符串名称)引发GeneralSecurityException {

  this.name=name

  生成//公钥/私钥对:

  keypairgeneratorkpgen=密钥对生成器. getinstance(RSA);

  kpgen . initialize(1024;

  密钥对KP=KP gen.generate密钥对(;

  this . sk=KP . get private(;

  this . PK=KP . get public(;

  }

  //将私钥导出到字节

  公共字节[]获取私钥

  返回this . sk . get encoded(;

  }

  //将公钥导出到字节

  Public byte []获取公钥

  返回this . PK . get encoded(;

  }

  //用公钥加密:

  public byte[]encrypt[byte[]message]ThrowsGeneralSecurityException {

  cipher cipher=cipher . getinstance(RSA);

  cipher . init(cipher . encrypt _ mode,this . PK);

  返回cipher.do final(消息;

  }

  //用私钥解密:

  public byte[]decrypt(byte[]input)抛出GeneralSecurityException {

  cipher cipher=cipher . getinstance(RSA);

  cipher . init(cipher . decrypt _ mode,this . sk);

  Return cipher.do final(输入;

  }

  }

  RSA的公钥和私钥都可以在getEncoded()方法中检索byte[])表示的二进制数据,需要时保存到一个文件中。要从byte[]数组中恢复公钥或私钥,请编写以下内容:

  byte[] pkData=。

  byte[] skData=。

  key factory KF=key factory . getinstance(RSA);

  //恢复公钥:

  x 59 encodedkeyspecpspec=new x509 encodedkeyspec(PK数据);

  公钥PK=KF . generate public(PK spec);

  //恢复私钥:

  S8编码的keyspec=newpkcs8编码的keyspec (sk数据);

  私钥sk=KF . generate private(sk spec);

  以RSA算法为例,它的密钥有不同的长度,比如256/512/1024/2048/4096。长度越长,密码越强,当然计算速度也越慢。

  如果改变要加密的byte[]数据的大小,可以看到使用512位RSA加密时明文长度不能超过53字节;使用1024位RSA加密时,明文长度不能超过117个字节。因此,当使用RSA时,它总是与AES一起使用。也就是说任意长度的明文用AES加密,AES密码用RSA加密。

  另外,光靠非对称加密算法是无法防止中间人攻击的。

  练习

  摘要

  非对称加密是指加密和解密不使用相同的密钥,只有相同的公钥-私钥对才能成功解密。

  单独的非对称加密算法不能防止中间人攻击。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 如何对python字符串中字符进行替换,python 替换字符串
  • 如何对python字符串中字符进行替换,python 替换字符串,python字符串替换的2种方法
  • Python字符串转变量,python输出字符和数字变量
  • Python字符串转变量,python输出字符和数字变量,Python将字符串常量转化为变量方法总结
  • python字符串讲解,菜鸟教程python字符串
  • python字符串讲解,菜鸟教程python字符串,python 字符串详解
  • python字符串根据字符截取,python字符串的切片操作
  • python字符串根据字符截取,python字符串的切片操作,Python中的字符串切片(截取字符串)的详解
  • python中字符串的切片,python字符串
  • python中字符串的切片,python字符串,Python中字符串切片详解
  • python 去除字符串中的空格,python字符串去除空格
  • python 去除字符串中的空格,python字符串去除空格,Python 字符串去除空格的五种方法
  • ,,Python字符串拼接的4种方法实例
  • ,,Python字符串匹配之6种方法的使用详解
  • python编写函数去掉字符串中的空格,python字符串怎么去空格
  • 留言与评论(共有 条评论)
       
    验证码: