日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

密码学:RSA加密算法详解

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 密码学:RSA加密算法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

? 本文旨在說明RSA加密算法的原理及實現,而其相關的數學部分的證明則不是本文內容。


版權說明

著作權歸作者所有。

商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

作者:Q-WHai

發表日期: 2016年2月29日

本文鏈接:http://blog.csdn.net/lemon_tree12138/article/details/50696926

來源:CSDN

更多內容:分類 ? 數據加密與信息安全


RSA簡介

??1977年,三位數學家Rivest、Shamir 和 Adleman 設計了一種算法,可以實現非對稱加密。這種算法用他們三個人的名字命名,叫做RSA算法。從那時直到現在,RSA算法一直是最廣為使用的"非對稱加密算法"。毫不夸張地說,只要有計算機網絡的地方,就有RSA算法。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 摘自網絡


數學背景

? 此部分旨在補充本文的完整性。如果說你已經了解,或是不想了解此部分內容。那么可以直接跳過此部分的閱讀。

? 雖說只是補充說明(只能是補充的原因是因為博主的數學也是比較差的-_-!!!),但是此部分的內容卻是相當重要的。博主還是希望可以重新閱讀一下此部分。

1.互質

? 從小學開始,我們就了解了什么是質數?;ベ|是針對多個數字而言的,如果兩個正整數,除了1以外,沒有其他公因子,那么就稱這兩個數是互質關系(注意,這里并沒有說這兩個數一定是質數或有一個為質數。比如15跟4就是互質關系)。以下有一些關于質數與互質的性質:

  • 質數只能被1和它自身整除
  • 任意兩個質數都是互質關系
  • 如果兩個數之中,較大的那個數是質數,則兩者構成互質關系
  • 如果兩個數之中,較小的那個數是質數,且較大數不為較小數的整數倍,則兩者構成互質關系
  • 1和任意一個自然數是都是互質關系
  • p是大于1的整數,則p和p-1構成互質關系
  • p是大于1的奇數,則p和p-2構成互質關系

2.歐拉函數

??歐拉函數是求小于x并且和x互質的數的個數。其通式為:φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn)。

? 其中p1, p2……pn為x的所有質因數,x是不為0的整數。看到這里是不是有一些頭疼,太理論的東西的確不夠具象。我們且不去理會后面公式計算與論證,因為已經超出本文的范圍了。就前一句來說說吧,歐拉函數是求小于x并且和x互質的數的個數。這里我可以列舉一個例子:

? 令x = 16,那么x的所有質因數為:φ(16) = 16 * (1 - 1/2) = 8

? 我們也可以枚舉出所有比16小,且與16互質的數:1, 3, 5, 7, 9, 11, 13, 15

? 現在也給出部分歐拉函數的性質:

  • 若n是素數p的k次冪,,因為除了p的倍數外,其他數都跟n互質
  • 歐拉函數是積性函數——若m,n互質,
  • 當n為奇數時,
  • p是素數,,φ(p)稱為p的歐拉值

? 歐拉函數更多參考請見這里的鏈接。


3.模反元素

定義:如果兩個正整數a和n互質,那么一定可以找到整數b,使得 ab-1 被n整除,或者說ab被n除的余數是1。

關于模反元素的求解,使用的是樸素的解法。如果讀者想要更進一步了解的話,請自行搜索其他解法(比如:輾轉相除法、歐幾里德算法)。


RSA原理

? 在RSA原理之前,我想還是有必要了解一下非對稱加密算法的加密跟解密過程。下面就是一幅非稱加密算法的流程圖。

??

? 在此可以看到,非對稱加密是通過兩個密鑰(公鑰-私鑰)來實現對數據的加密和解密的。公鑰用于加密,私鑰用于解密。對于非對稱的加密和解密為什么可以使用不同的密鑰來進行,這些都是數學上的問題了。不同的非對稱加密算法也會應用到不同的數學知識。上面也對RSA中使用的數學問題做了一個小小的介紹。現在就來看看RSA算法是怎么來對數據進行加密的吧,如下是一幅RSA加密算法流程及加密過程圖。

??


RSA應用

1. 實例模型

? 就以上圖中的Bob和Alice來舉例吧。

? 現在Alice通過密鑰生成器生成了一對密鑰(公鑰-私鑰)。只把公鑰對外公開了。并說,你有什么要跟我說的,就用模冪運算和公鑰加密后發給我吧。

? 此時,Bob已經獲得了Alice發布的公鑰。使用模冪運算對明文進行了加密,就把加密后的密文發送給了Alice。

? Alice獲得Bob發來的密文并沒有使用公鑰對密文進行解密,并獲得了明文。因為解密過程需要使用的密鑰是私鑰。


2. RSA算法實現

? 下面的代碼只是根據RSA算法的定義,使用Java開發語言實現。且這里只是展示了一些關鍵步驟,完整過程可以參見下面的源碼下載文檔。

public class RSA { /*** 獲得(公/私)密鑰*/public final Map<String, RSAKey> getCipherKeys() {...int[] primes = getRandomPrimes(2);int modulus = modulus(primes[0], primes[1]);int euler = euler(primes[0], primes[1]);int e = cipherExponent(euler);int inverse = inverse(euler, e);publicKey.setExponent(e);publicKey.setModulus(modulus);privateKey.setExponent(inverse);privateKey.setModulus(modulus);...}/*** 加密*/public int encode(int plaintext, RSAPublicKey key) {return modularPower2(plaintext, key.getExponent(), key.getModulus());}/*** 解密*/public int decode(int chipertext, RSAPrivateKey key) {return modularPower2(chipertext, key.getExponent(), key.getModulus());}// 隨機生成count個素數private final int[] getRandomPrimes(int count) {...try {primeLabels = FileReadUtils.readLines("./data/prime_table");} catch (IOException e) {e.printStackTrace();}for (int i = 0; i < primes.length; i++) {primes[i] = Integer.parseInt(primeLabels.get(indexs.get(i)));}return primes;}// 計算公共模數private final int modulus(int p, int q) {return p * q;}// 計算歐拉數private final int euler(int p, int q) {return (p - 1) * (q - 1);}// 計算加密指數private final int cipherExponent(int euler) {Random random = new Random();int e = 7;do {e = random.nextInt(euler - 1);} while (!isCoprime(e, euler) || e <= 1);return e;}// 判斷兩個數互素private final boolean isCoprime(int number1, int number2) {int sqrt = (int) Math.sqrt(Math.max(number1, number2));for (int i = 2; i <= sqrt; i++) {if (number1 % i == 0 && number2 % 2 == 0) {return false;}}return true;}// 計算“模的逆元”// (d * e) ≡ 1 mod eulerprivate final int inverse(int euler, int e) {...while (flag) {q = m[2] / n[2];for (int i = 0; i < 3; i++) {temp[i] = m[i] - q * n[i];m[i] = n[i];n[i] = temp[i];}if (n[2] == 1) {if (n[1] < 0) {n[1] = n[1] + euler;}return n[1];}if (n[2] == 0) {flag = false;}}return 0;}// 模冪運算private final int modularPower(int base, int e, int modular) {int result = 1;do {if (isOdd(e)) {result = (result * (base % modular)) % modular;e -= 1;} else {base = (base * base) % modular;e /= 2;}} while (e > 0);result %= modular;return result;} }

RSA算法判別

RSA算法優點

  • 不需要進行密鑰傳遞,提高了安全性
  • 可以進行數字簽名認證
  • RSA算法缺點

  • 加密解密效率不高,一般只適用于處理小量數據(如:密鑰)
  • 容易遭受小指數攻擊

  • Ref

  • 《算法導論》
  • 《算法的樂趣》
  • 《深入淺出密碼學》
  • RSA算法原理(一)?-- 阮一峰
  • RSA算法原理(二)?-- 阮一峰
  • 逆元詳解 --?ACdreamers
  • JAVA實現擴展歐幾里德算法求乘法逆元

  • 源碼下載

    http://download.csdn.net/detail/u013761665/9439852

    總結

    以上是生活随笔為你收集整理的密码学:RSA加密算法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧洲色av | 天天爱天天操 | 免费一级特黄毛大片 | 国产一区二区三区四区五区在线 | 天堂视频在线观看免费 | 波多野av在线 | 日本特级黄色片 | 美女黄污网站 | 精品国产一区二区三区久久久 | 黄色免费小视频 | av黄色av| 涩天堂 | 丰满岳乱妇在线观看中字无码 | 久草精品在线观看 | 久久免费视频精品 | 特级大胆西西4444人体 | 午夜精品免费观看 | 91小仙女jk白丝袜呻吟 | 色爱视频 | 丰满少妇高潮一区二区 | 中文二区 | 天堂网视频在线观看 | 日韩乱码在线观看 | 亚洲精品欧美精品 | 亚洲欲妇 | 亚洲av无码一区二区三区网址 | 麻豆com| 成人在线视频在线观看 | 亚州一级 | 视频在线观看91 | 亚洲v国产v欧美v久久久久久 | 秋霞国产精品 | 国产精品视频专区 | 香蕉网站在线观看 | 国产亚洲美女精品久久久2020 | 免费三片在线观看网站v888 | 欧美熟妇精品一区二区蜜桃视频 | 看污片网站 | 少妇一级淫片免费播放 | 韩国一级一片高清免费观看 | 国产精品爽爽久久久久久 | 日本一区二区免费在线 | 99在线视频免费观看 | 日本高清视频一区二区 | 国内精品在线播放 | 久久蜜桃av一区二区天堂 | 欧美日韩国产专区 | 182av| 桃色视屏 | 中文字幕一区二区三区人妻不卡 | 成年人激情网站 | 国产亚洲女人久久久久毛片 | 欧美视频一区二区三区 | 成人av激情 | 麻豆av一区二区三区在线观看 | 亚洲一区二区观看 | 毛片大全在线观看 | 久久久久久久国产精品美女 | 免费观看全黄做爰的视频 | 国产免费a视频 | 亚洲欧美一区二区三区在线 | 激情专区 | 亚州欧美日韩 | 欧美二区在线观看 | 日本男女网站 | 黄色国产一区二区 | 泰剧19禁啪啪无遮挡 | 超碰狠狠干 | 可以看的毛片 | 午夜一二三区 | 操一操| 麻豆视频在线免费观看 | 日本高清视频在线播放 | 国产一级二级毛片 | 999国产精品视频免费 | 老色批影视 | 日本久久久久久久久 | 伊人久久在线 | 国产午夜网站 | 亚洲国产精品一 | 夜色在线视频 | 免费国产 | 国产成人8x视频一区二区 | 宗合久久| 五月天久久综合 | 国产精品乱码久久久久久久久 | 99久久久成人国产精品 | 自拍视频啪| 91免费官网 | 精品久久久无码中文字幕 | 一级片自拍| 波多野结衣免费观看视频 | av三级在线观看 | 玉足女爽爽91 | 乱熟女高潮一区二区在线 | 野花社区视频在线观看 | 中文字幕99页 | 亚洲美女综合 | 欧美日b片|