当前位置: 首页 > news >正文

eclipse tomcat 网站开发网址导航被更改了怎么换回来

eclipse tomcat 网站开发,网址导航被更改了怎么换回来,深圳建设集团怎么样,纯文本网页制作步骤hi#xff0c;大家好#xff0c;我是开发者FTD。今天我们开始介绍非对称加密算法。非对称加密算法区别于对称加密算法的主要特点是#xff0c;非对称加密算法有两个密钥#xff1a;公钥 (public key) 和私钥 (private key)。公钥和私钥是一对密钥#xff0c;如果用公钥对数…hi大家好我是开发者FTD。今天我们开始介绍非对称加密算法。非对称加密算法区别于对称加密算法的主要特点是非对称加密算法有两个密钥公钥 (public key) 和私钥 (private key)。公钥和私钥是一对密钥如果用公钥对数据加密那么只能用对应的私钥解密相同的如果用私钥对数据加密只能用对应的公钥进行解密。因为加密和解密用的是不同的密钥所以将这种加密算法称为非对称加密。 非对称加密算法的安全性好由于有两个密钥所以它不需要交换比较重要的私钥只需要交换对外公开的公钥即可它消除了用户最终交换密钥的需要。不过非对称加密算法的加解密速度要远远慢于对称加密在某些极端情况下甚至能比对称加密慢上1000倍。 RSA 算法简介 RSA 算法是1977年由罗纳德·李维斯特Ron Rivest、阿迪·萨莫尔Adi Shamir和伦纳德·阿德曼Leonard Adleman一起提出的。RSA 算法既能用于加密也能用于做数字签名。 RSA 算法非常可靠密钥越长它就越难破解。根据已经披露的文献目前被破解的最长RSA密钥是768个二进制位。也就是说长度超过768位的密钥还无法破解至少没人公开宣布。因此可以认为1024位的RSA密钥基本安全2048位的密钥极其安全。 算法原理 RSA 是目前最有影响力的公钥加密算法该算法基于一个十分简单的数论事实将两个大素数相乘十分容易但想要对其乘积进行因式分解却极其困难因此可以将乘积公开作为加密密钥即公钥而两个大素数组合成私钥。公钥是可发布的供任何人使用私钥则为自己所有供解密之用。 RSA的公钥、私钥的组成以及加密、解密的公式可见于下表 公钥 KUn两素数 p 和 q 的乘积p 和 q 必须保密e与p - 1q - 1互质私钥 KRde^-1 mod(p-1)(q-1)n p 和 q 的乘积加密C ≡ m^e mod n解密m ≡ c^d mod n 大家看了这些公式估计有些懵没关系我们一个一个解释一下。首先我们先复习一下数学中的一些基础概念 什么是“素数” 素数也称为“质数”是指除了能表示为它自己和1的乘积以外不能表示为任何其它两个整数的乘积的数字。 例如1535所以15不是素数又如126243所以12也不是素数。又例如13除了等于131以外不能表示为其它任何两个整数的乘积所以13是一个素数。 什么是“互质数”或“互素数” 小学数学教材对互质数是这样定义的“公约数只有1的两个数叫做互质数。” 这里所说的“两个数”是指自然数。 判别方法主要有以下几种不限于此 两个质数一定是互质数。例如2与7、13与19。一个质数如果不能整除另一个合数这两个数为互质数。例如3与10、5与 26。1不是质数也不是合数它和任何一个自然数在一起都是互质数。如1和9908。相邻的两个自然数是互质数。如 15与 16。相邻的两个奇数是互质数。如 49与 51。大数是质数的两个数是互质数。如97与88。小数是质数大数不是小数的倍数的两个数是互质数。如 7和 16。两个数都是合数二数差又较大小数所有的质因数都不是大数的约数这两个数是互质数。如357与7153573×7×17而3、7和17都不是715的约数这两个数为互质数。等等。 什么是模指数运算 我们先说下指数运算指数是位于一个未知数的右上方表示这个未知数相乘几次例如2 ^ 4 16 模运算是整数运算有一个整数m以n为模做模运算即m mod n。让m去被n整除只取所得的余数作为结果就叫做模运算。例如10 mod 3 126 mod 6 228 mod 2 0 等。 而模指数运算就是先做指数运算取其结果后再做模运算。如 53mod7125mod765 ^ 3 \quad mod \quad 7 \quad \quad 125 \quad mod \quad 7 \quad \quad 6 53mod7125mod76 好下面我们开始正式介绍RSA加密算法。 RSA 算法描述 选择一对不同的、足够大的素数pq。 计算 n pq。 计算 f(n) (p-1)(q-1) 同时对p, q严加保密不能让其他任何人知道。 找一个与 f(n) 互质的数 e且 1ef(n) 。 计算 d使得 de ≡ 1 mod f(n)。这个公式也可以表达为d ≡ e^-1 mod f(n) 这里要解释一下≡ 是数论中表示同余的符号。公式中≡ 符号的左边必须和符号右边同余也就是两边模运算结果相同。显而易见不管f(n)取什么值符号右边1 mod f(n)的结果都等于1符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d的值让这个同余等式能够成立。 公钥 KU(e,n)私钥 KR(d,n)。 加密时先将明文变换成0至n-1的一个整数M。若明文较长可先分割成适当的组然后再进行交换。设密文为C则加密过程为 C≡MemodnC ≡ M^e \quad mod\quad n C≡Memodn ​ 解密过程为 M≡CdmondnM ≡ C^d\quad mond \quad n M≡Cdmondn RSA 算法举例 在这里我们无法对RSA算法的正确性作严格的数学证明但我们可以通过一个简单的例子来理解RSA算法的工作原理。为了便于计算。在以下实例中只选取小数值的素数pq以及e假设用户A需要将明文“key”通过RSA加密后传递给用户B过程如下 1设计公私密钥(e,n)和(d,n)。 令p3q11得出np×q3×1133f(n)(p-1)(q-1)2×1020取e33与20互质则e×d≡1 mod f(n)即 3×d ≡ 1 mod 20。 d怎样取值呢可以用试算的办法来寻找。试算结果见下表 de x d 3 x d(e x d) mod (p - 1)(q - 1) (3 x d) mod 20133266399412125151561818721182439276 通过试算我们找到当d7时e×d≡1 mod f(n)同余等式成立。因此可令d7。从而我们可以设计出一对公私密钥加密密钥公钥为KU (e,n)(3,33)解密密钥私钥为KR (d,n)(7,33)。 2英文数字化。 将明文信息数字化并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值即 字母abcdefghijklm码值01020304050607080910111213字母nopqrstuvwxyz码值14151617181920212223242526 则得到分组后的key的明文信息为110525。 3明文加密 用户加密密钥(3,33) 将数字化明文分组信息加密成密文。根据公式 C≡Me(modn)C ≡ M^e \quad (mod\quad n) C≡Me(modn) 得 113mod331111^3 \quad mod \quad 33 11 113mod3311 53mod33265^3 \quad mod \quad 33 26 53mod3326 253mod331625^3 \quad mod \quad 33 16 253mod3316 因此得到相应的密文信息为112616。 4密文解密。 用户B收到密文若将其解密只需要根据以下公式计算 M≡CdmondnM ≡ C^d\quad mond \quad n M≡Cdmondn 即 117mod331111^7 \quad mod \quad 33 11 117mod3311 267mod330526^7 \quad mod \quad 33 05 267mod3305 167mod332516^7 \quad mod \quad 33 25 167mod3325 用户B得到明文信息为110525。根据上面的编码表将其转换为英文我们又得到了恢复后的原文“key”。 通过实例我们可以很清楚的看清楚RSA算法的一个原理。 当然实际在加密过程中要比这复杂得多由于RSA算法的公钥私钥的长度模长度要到1024位甚至2048位才能保证安全因此p、q、e的选取、公钥私钥的生成加密解密模指数运算都有一定的计算程序需要仰仗计算机高速完成。 RSA 算法工作流程 A 要把信息发给 B 为例确定角色A 为加密者B 为解密者。 首先由 B 随机确定一个 KEY称之为私钥将这个 KEY 始终保存在机器 B 中而不发出来 然后由这个 KEY 计算出另一个 KEY称之为公钥。这个公钥的特性是几乎不可能通过它自身计算出生成它的私钥。 接下来通过网络把这个公钥传给 AA 收到公钥后利用公钥对信息加密并把密文通过网络发送到 B。 最后 B 利用已知的私钥就能对密文进行解密了。 以上就是 RSA 算法的工作流程。 RSA 算法加密速度 由于进行的都是大数计算使得 RSA 最快的情况也比 DES 慢上好几倍无论是软件还是硬件实现。速度一直是 RSA 的缺陷。一般来说只用于少量数据加密。RSA 的速度是对应同样安全级别的对称密码算法的1/1000左右。 比起 DES 和其它对称算法来说RSA 要慢得多。实际上一般使用一种对称算法来加密信息然后用 RSA 来加密比较短的公钥然后将用 RSA 加密的公钥和用对称算法加密的消息发送给接收方。 这样一来对随机数的要求就更高了尤其对产生对称密码的要求非常高否则的话可以越过 RSA 来直接攻击对称密码。 公钥传递安全 和其它加密过程一样对 RSA 来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡中间人攻击。 假设 A 交给 B 一个公钥并使 B 相信这是A 的公钥并且 C 可以截下 A 和 B 之间的信息传递那么 C 可以将自己的公钥传给 BB 以为这是 A 的公钥。C 可以将所有 B 传递给 A 的消息截下来将这个消息用自己的密钥解密读这个消息然后将这个消息再用 A 的公钥加密后传给 A。理论上 A 和 B 都不会发现 C 在偷听它们的消息今天人们一般用数字认证来防止这样的攻击。 RSA算法优缺点 优点 不需要进行密钥传递提高了安全性可以进行数字签名认证 缺点 加密解密效率不高一般只适用于处理小量数据如密钥容易遭受小指数攻击 RSA 算法实现 RSA密钥生成 /*** 生成RSA 公私钥,并存储到字符串数组中** return* throws NoSuchAlgorithmException*/ public static String[] genRSAKeys2Str() throws NoSuchAlgorithmException {// 生成密匙对KeyPair kp generateKeyPairs();//得到公钥Key publicKey kp.getPublic();// 得到私钥Key privateKey kp.getPrivate();// 得到公私钥字节数组byte[] publicKeyBytes publicKey.getEncoded();byte[] privateKeyBytes privateKey.getEncoded();// 得到base64编码后的公私钥字符串String publicKeyStr Base64.encodeBase64String(publicKeyBytes);String privateKeyStr Base64.encodeBase64String(privateKeyBytes);String[] rsaKeys new String[2];rsaKeys[0] publicKeyStr;rsaKeys[1] privateKeyStr;return rsaKeys; }/*** 生成密匙对 KeyPairs** return KeyPair keyPair* throws NoSuchAlgorithmException*/ private static KeyPair generateKeyPairs() throws NoSuchAlgorithmException {// RSA算法要求有一个可信任的随机数源SecureRandom sr new SecureRandom();// 为RSA算法创建一个KeyPairGenerator对象KeyPairGenerator kpg KeyPairGenerator.getInstance(RSA_ALGORITHM);// 利用上面的随机数据源初始化这个KeyPairGenerator对象kpg.initialize(RSA_KEY_SIZE, sr);return kpg.generateKeyPair(); }公钥加密 /*** RSA 通过【公钥】加密** param pubKey* param data* return* throws Exception*/ public static byte[] encryptByPubKey(byte[] pubKey, byte[] data) throws Exception {// 构建keyKey rsaPubKey buildPubKey(pubKey);// 加密return encrypt(rsaPubKey, data); }// 生成KeySpec注意公私钥使用的生成类不同 private static Key buildPubKey(byte[] pubKey) throws Exception {// 创建KeySpecX509EncodedKeySpec keySpec new X509EncodedKeySpec(pubKey);KeyFactory keyFactory KeyFactory.getInstance(RSA_ALGORITHM);return keyFactory.generatePublic(keySpec); }// 加密方法 private static byte[] encrypt(Key key, byte[] data) throws Exception {Cipher cipher Cipher.getInstance(RSA_CIPTHER);cipher.init(Cipher.ENCRYPT_MODE, key);byte[] encryptData cipher.doFinal(data);return encryptData; }私钥解密 /*** RSA 使用【私钥】解密** param priKey 密钥* param encryptData 密文数据* return 明文字节数组* throws Exception 解密过程中的异常信息*/ public static byte[] decryptByPriKey(byte[] priKey, byte[] encryptData)throws Exception {Key rsaPriKey buildPriKey(priKey);// 返回解密数据return decrypt(rsaPriKey, encryptData); }// 生成KeySpec注意公私钥使用的生成类不同 private static Key buildPriKey(byte[] priKey) throws Exception {// 创建KeySpecPKCS8EncodedKeySpec keySpec new PKCS8EncodedKeySpec(priKey);KeyFactory keyFactory KeyFactory.getInstance(RSA_ALGORITHM);return keyFactory.generatePrivate(keySpec); }// 解密 private static byte[] decrypt(Key key, byte[] encryptData) throws Exception {Cipher cipher Cipher.getInstance(RSA_CIPTHER);cipher.init(Cipher.DECRYPT_MODE, key);byte[] decryptData cipher.doFinal(encryptData);// 返回解密数据return decryptData; }RSA 算法应用场景 (1) 信息加密 收信者是唯一能够解开加密信息的人因此收信者手里的必须是私钥。发信者手里的是公钥其它人知道公钥没有关系因为其它人发来的信息对收信者没有意义。 (2) 登录认证 客户端需要将认证标识传送给服务器此认证标识 (可能是一个随机数) 其它客户端可以知道因此需要用私钥加密客户端保存的是私钥。服务器端保存的是公钥其它服务器知道公钥没有关系因为客户端不需要登录其它服务器。 (3) 数字签名 数字签名是为了表明信息没有受到伪造确实是信息拥有者发出来的附在信息原文的后面。就像手写的签名一样具有不可抵赖性和简洁性。 简洁性对信息原文做哈希运算得到消息摘要信息越短加密的耗时越少。 不可抵赖性信息拥有者要保证签名的唯一性必须是唯一能够加密消息摘要的人因此必须用私钥加密 (就像字迹他人无法学会一样)得到签名。如果用公钥那每个人都可以伪造签名了。 (4) 数字证书 问题起源对1和3发信者怎么知道从网上获取的公钥就是真的没有遭受中间人攻击 这样就需要第三方机构来保证公钥的合法性这个第三方机构就是 CA (Certificate Authority)证书中心。 CA 用自己的私钥对信息原文所有者发布的公钥和相关信息进行加密得出的内容就是数字证书。 信息原文的所有者以后发布信息时除了带上自己的签名还带上数字证书就可以保证信息不被篡改了。信息的接收者先用 CA给的公钥解出信息所有者的公钥这样可以保证信息所有者的公钥是真正的公钥然后就能通过该公钥证明数字签名是否真实了。 总结 RSA 算法是目前使用最为广泛的非对称加密算法你可以在各种对安全要求比较高的场景中看到它的身影所以掌握RSA 算法是我们工作中比不缺的一项技能。 创作不易如果大家喜欢本文欢迎点赞转发你的关注是我们继续前进的动力_ 参考 1RSA算法理解 2加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH) 关于作者 GitHubhttps://github.com/ForTheDevelopers 掘金https://juejin.cn/user/1204720472953022/posts CSDNhttps://blog.csdn.net/ForTheDevelopers segmentfaulthttps://segmentfault.com/u/for_the_developers 联系作者 微信号ForTheDeveloper 公众号ForTheDevelopers
http://www.sadfv.cn/news/35635/

相关文章:

  • 中国和住房城乡建设部网站首页torrentkitty磁力官网
  • 优质的网站建设推广北京网站优化济南兴田德润简介电话
  • 图片网站制作html5 微网站开发
  • 万网 网站建设国内网站没备案
  • 学校网站的目的高邮市建设局网站
  • 营销型网站建设测验题wordpress博客自媒体资讯主题
  • 做设计有哪些免费网站北京网站建设公司朝阳
  • 企业网站建设服务好设计公司工作室
  • 瀑布流网站模板做网络推广网站有哪些
  • 做网站推广的方法有哪些网站 备案 在哪
  • 响应式网站滑动查询网站开发
  • 注册域名哪个网站好重庆建设施工安全信息网官网
  • 温州网站建设制作公司温州网站设计工作室
  • 北京网站制作建设公司网站建设百度推广
  • 中国做民宿的网站优秀网站设计欣赏
  • 特价主机网站空间租用wordpress撰写设置
  • 如何做公司培训网站seo推广专员工作内容
  • 安徽省住房和城乡建设厅网站首页网站开发和编程的联系
  • 国内外公司网站差异新网官方网站
  • 网站建设时图片和文字网站首页site不到 a5
  • 上海wordpress网站建设建设部项目经理认证网站
  • 如何做视频网站首页简要说明网站建设的基本流程
  • wordpress无限绑域名东莞网站优化方案
  • 网站上展示手机页面是怎么做的西安赶集网官网
  • 国内设计好的网站案例wordpress文章图片幻灯片
  • 巴中区建设局网站动态图片怎么制作
  • 手机表白网站在线制作有哪些做包装设计网站好些
  • 数码商城网站建设wordpress产品编辑
  • 网站建设内容保障制度怎样营销建设网站
  • 恩施网站制作公司北京做网站维护