HỆ MÃ HÓA CÔNG KHAI RSA QUÁ TRÌNH MÃ HÓA GIẢI MÃ VÀ CHỮ KÝ SỐ

63 625 1
HỆ MÃ HÓA CÔNG KHAI RSA QUÁ TRÌNH MÃ HÓA GIẢI MÃ VÀ CHỮ KÝ SỐ

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MC LC LI NểI U Phn I Lí THUYT CHUNG V AN TON BO MT THễNG TIN Chng MT S KHI NIM 1.1 Khỏi nim h mt mó 1.2 Mó húa v gii mó 1.3 Quy trỡnh mó húa v gii mó d liu 1.4 Khỏi nim h mó c in 1.5 H mó cụng khai Chng MT S H M C IN 2.1 Mó dch vũng 2.2 Mó thay th 2.3 Mó Affine 2.4 Mó Vigenere 11 2.5 H mó Hill 12 2.6 H mó Hoỏn v 13 2.7 Cỏc h mó dũng 15 2.8 S lc v mó cỏc h mó c in 17 2.9 Nhn xột chung v cỏc h mt mó c in 18 Chng 19 H M DES 19 3.1 Mụ t DES 19 3.2 Vớ d 27 Chng 31 MT S H MT M CễNG KHAI 31 4.1 Tng quan 31 4.2 H mó RSA 31 4.3 H mó Ba Lụ 32 Phn II 35 H M CễNG KHAI RSA V CI T RSA 35 Chng 35 H M CễNG KHAI RSA 35 1.1 C s toỏn hc ca thut toỏn RSA 35 1.2 To khúa ca mó RSA 38 1.3 Mó húa 39 1.4 Gii mó 40 1.5 Vớ d 40 1.6 Mt s 41 -1- 1.7 ỏnh giỏ an ton 42 1.8 Ch ký s bng h mó RSA 44 Chng 46 CI T THUT TON RSA 46 2.1 Xõy dng lp BigInteger lu s ln 46 2.2 Ci t thut toỏn 46 KT LUN 53 TI LIU THAM KHO 54 Ph lc 55 MT S M NGUN 55 NHN XẫT CA GIO VIấN HNG DN 63 -2- LI NểI U T xa n thụng tin luụn l yu t quan trng cỏc hot ng ca i sng ngi Trong thi i ngy nay, cỏc phng thc truyn t thụng tin ngy cng a dng v phỏt trin Vi s i ca mỏy tớnh v mng mỏy tớnh, vic trao i thụng tin ó tr lờn d dng hn, nhanh chúng hn, a dng hn Nhng kốm theo ú l cỏc nguy c xõm phm thụng tin cng ngy cng tng Nm bt c thụng tin nhiu mang ý ngha quyt nh, sng cũn c bit cỏc lnh vc: kinh t, chớnh tr, an ninh, quc phũngVỡ vy vic bo mt thụng tin ó, ang v s l c t rt cp bỏch gii quyt ú cỏc h mt mó ó i T cỏc h mt mó s khai c in nh: h mó dch vũng, h mó Hill, h mó Affine,, cho n cỏc h mt mó hin i, phc nh h mó DES Cỏc h mt mó cụng khai nh h mó RSA, h mó ba lụ Nhng i kốm vi s i v phỏt trin ca cỏc h mt mó l cỏc phng phỏp phỏ khúa cỏc h mt mó ú Cuc chin gia bo mt thụng tin v xõm phm thụng tin luụn din mt cỏch thm lng nhng vụ cựng gay gt Vi mong mun tỡm hiu c cỏc phng phỏp bo mt thụng tin em ó chn ti H M HểA CễNG KHAI RSA: QU TRèNH M HO, GII M V CH Kí S lm ỏn tt nghip Tuy ó cú nhiu c gng vic xõy dng ỏn nhng cũn hn ch v mt thi gian cng nh kin thc v kinh nghim thc t nờn ỏn khụng trỏnh nhng thiu sút Vỡ vy em rt mong c s ch bo, úng gúp ý kin ca cỏc thy cụ giỏo ỏn ca em ngy cng hon thin hn -3- Phn I Lí THUYT CHUNG V AN TON BO MT THễNG TIN Chng MT S KHI NIM 1.1 Khỏi nim h mt mó Mt h mt mó l mt b (P,C,K,E,D) tha cỏc iu kin sau: P: L mt hp hu hn cỏc bn rừ, nú c gi l khụng gian bn rừ C: L hu hn cỏc bn mó, nú c gi l khụng gian bn mó Mi phn t ca C cú th nhn c bng cỏch ỏp dng phộp mó húa Ek lờn mt phn t ca P, vi kK K: L hu hn cỏc khúa hay cũn gi l khụng gian khúa i vi mi phn t k ca K c gi l mt khúa S lng ca khụng gian khúa phi ln k ch khụng cú thi gian th mi khúa cú th (phng phỏp vột cn) i vi mi k K cú mt quy tc mó ek : P C v mt quy tc gii mó tng ng dk D Mi ek : P C v dk : C P l nhng hm m: Dk (ek ( x)) x vi mi bn rừ x P 1.2 Mó húa v gii mó Mó húa l quỏ trỡnh che du ni dung ca thụng tin, khụng cho ngi khỏc cú th c c nú Gii mó quỏ trỡnh ngc li vi mó húa, tc l quỏ trỡnh khụi phc li thụng tin ban u t thụng tin ó c mó húa 1.3 Quy trỡnh mó húa v gii mó d liu -4- Quản lý khoá Khoỏ Ke DL gc Mó hoỏ DL mó hoỏ Khoỏ Kd Gii mó DL gc Hỡnh 1.1: Quy trỡnh mó hoỏ d liu Quy trỡnh thc hin nh sau: B phn qun lý khúa thc hin lp khoỏ mó hoỏ ( Ke ) v khúa gii mó ( Kd ) D liu gc c mó húa nh khúa mó húa Vn õy l qun lý khúa nh th no cho vic mó húa v gii mó tng i n gin v m bo tuyt i mt cho khúa gii mó 1.4 Khỏi nim h mó c in Trong cỏc h mó c in, ngi ta s dng cựng mt khúa hai phớa d nhiờn hn ch s an ton v ph bin ca phng phỏp i xng, ng thi cng l im yu, bi vỡ ch cn mt bờn l khúa thỡ mt s b mt H mó c in l loi mó c thc hin thụng qua hm f cú tớnh thun nghch, s dng f mó húa, bit f cú th suy hm gii mó f Mt s h mó c in - Mó dch vũng - Mó thay th - Mó hoỏn v - Mó Affine - Mó Vigenere - Mó Hill -5- - Mó dũng 1.5 H mó cụng khai Mt mó húa khúa cụng khai l mt dng mt mó húa cho phộp ngi s dng trao i cỏc thụng tin mt m khụng cn phi trao i cỏc khúa chung mt trc ú iu ny c thc hin bng cỏch s dng mt cp khúa cú quan h toỏn hc vi l khúa cụng khai v khúa cỏ nhõn (hay khúa mt) Mt s h mó cụng khai - H mó RSA - H mó Ba Lụ -6- Chng MT S H M C IN 2.1 Mó dch vũng 2.1.1 Mụ t Mó dch vũng l mt bn mó c to bng cỏch mi kớ t ca bn rừ c dch i k v trớ theo chiu kim ng h Mó dch vũng c xỏc nh trờn Z26 (do cú 26 ch cỏi trờn bng ch cỏi trờn bng ch cỏi ting Anh) Gi s P = C = K = Z26 vi k 25 , nh ngha: eK x x K mod 26 d K x y K mod 26 v x, y 26 Ta thy trng hp k , h mt thng c gi l h mt Caesar thng c Julius Caesar s dng Vớ d: Mó húa: Gi s khúa cho MDV l K = 11 v bn rừ l :wewillmeetatmidnight i chui s theo t t bng ch cỏi ta cú: 22 22 11 11 12 4 19 19 12 13 19 Cng vi khúa v modulo 26: 15 19 22 22 23 15 15 11 23 19 14 24 19 17 18 Ta thu c bn mó: HPHTWWXPPELEXTOYTRSE -7- Gii mó: 15 19 22 22 23 15 15 11 23 19 14 24 19 17 18 Tr mi s cho 11 v rỳt gn theo mod 26 ta c dóy s 22 22 11 11 12 4 19 19 12 13 19 i dóy s ny ch cỏi ta thu c bn rừ: Bn rừ: wewillmeetatmidnight 2.1.2 ỏnh giỏ an ton iu kin mt h mt an ton l phộp tỡm khúa vột cn l khụng th thc hin c, nhng khụng gian khúa quỏ nh nờn d dng th mi khoỏ dk cú th cho ti nhn c bn rừ cú ngha Vỡ vy h mó dch vũng l mt h mó khụng an ton 2.2 Mó thay th 2.2.1 Mụ t cú c bn mó ngi ta thay i mt ký hiu bn rừ bng mt ký hiu no ú Trờn thc t, mó thay th cú th ly c P v C u l b ch cỏi ting Anh (26 ch cỏi ) Ta dựng Z26 mó dch vũng vỡ cỏc phộp mó húa v gii mó u l cỏc phộp toỏn i s Trong mó thay th, cú th xem mó húa v gii mó nh cỏc hoỏn v ca cỏc ký t Ta cú th nh ngha mó thay th di dng toỏn hc nh sau Gi s P = C = K = Z26 K cha mi hoỏn v cú th ca 26 kớ hiu 0,1,25 Vi mi phộp hoỏn v K ta nh ngha: e x x v d y y Trong ú l hoỏn v ngc ca -8- Sau õy l mt vớ d v phộp hoỏn v ngu nhiờn to nờn mt hm mó húa (cng nh trc cỏc ký hiu ca bn rừ c kớ hiu bng ch in thng cũn cỏc ký hiu ca bn mó c kớ hiu bng ch in hoa) a b c d e f g h i k l m X N Y A H P O G Z Q W B t n o p q r s t u v w x y z S F L R C V M U E K J D I Nh vy e (a) X , e (b) N , Hm gii mó l phộp hoỏn v ngc iu ny c thc hin bng cỏch vit hng th hai lờn trc ri sp xp theo th t ch cỏi Ta nhn c: A B C D E F G H I J K L M d l r y v o h e z x v p t N O P Q R S T U V W X Y Z b g f j q n m u s k a c i Bi vy d ( A) d , d ( B ) 1, 2.2.2 ỏnh giỏ an ton Mi khúa ca mó thay th l mt phộp hoỏn v ca 26 kớ t S cỏc hoỏn v ny l 26! , ln hn 1026 l mt s rt ln Bi vy, phộp tỡm khúa vột cn khụng th thc hin c, thm bng mỏy tớnh Tuy nhiờn mó hoỏn v li d dng b bng cỏc phng phỏp khỏc 2.3 Mó Affine 2.3.1 Mụ t Mó Affine l mt trng hp c bit ca mó thay th ch gm cú 26 s 26! cỏc hoỏn v ca 26 phn t Mó Affine c nh ngha nh sau: -9- Gi s P = C = K = Z26 v gi s P={(a,b) Z26 x Z26: USCLN(a,26)=1} Vi k a, b K , ta nh ngha: ek x ax b mod 26 d k y a y b mod 26 v x,y Z26 Vớ d: Gi s k = (7,3) Ta tớnh c mod 26 15 Hm mó húa l ek x x V hm gii mó tng ng l Dk x 15 y 15 y 19 õy tt c cỏc phộp toỏn u c thc hin trờn Z26 minh ta hóy mó húa bn rừ hot Trc tiờn ta bin i cỏc ch h, o, t thnh cỏc thng d theo modulo 26 Ta c cỏc s tng ng l 7,14,19 bõy gi s mó húa: mod 26 52 mod 26 14 mod 26 101mod 26 23 19 mod 26 136 mod 26 Bi vy kớ hiu ca bn mó l 0, 23, tng ng vi xõu kớ t axg Thc hin gii mó theo hm gi mó ta thu c bn mó hot 2.3.2 ỏnh giỏ an ton Do c trng ca h mó c in: Hm mó húa phi kh nghch, cú f thỡ tớnh c f , hm f phi l hm n ỏnh nh lý v nghim nht ca ng d a thc ax b mod m Bi vy, hm mó húa ca h mó Affine l hm ek(x) cú nghim nht (a,26) = -10- Hỡnh 2.3 Giao din nhp khúa ca quỏ trỡnh mó húa v ký Sau ó nhp y thụng tin thỡ ta kick vo nỳt ch ký trờn giao din tin hnh mó v ký Kt thỳc quỏ trỡnh ký ta c file mó cú tờn ma.rsa v file ký cú tờn l ky.rsa Trong hai file ny s cha nhng s sau ó mó v ký Hai file s c gi cho ngi nhn Ngi nhn s ly khúa cụng khai ca ngi gi v khúa mt ca bn than mỡnh gii mó v kim tra xem file ú ca phi l gi Ngi gi cng s chn file mó, file ký v file la chn a ch ghi file sau gii mó Khi ghi file gii mó thỡ ta cn phi chỳ ý n kiu file ca file gii mó õy ta chn tờn file gii mó l giaima.txt: -49- Hỡnh 2.4 Giao din ca quỏ trỡnh kim tra ch ký v gii mó Tng t nh quỏ trỡnh mó húa ta cng cn phi nhp khúa cho quỏ trỡnh gii mó v kim tra ch ký Nhp khúa cụng khai l: n=61397811013279417333587260312217061656765138198290851792407739807 3131982103683555919348557507456975673777758968439935846919933342360 7045771079671947577406095101231627947629532835334322542583160020805 6354679194685289912995399844245473430461389568395418376146161534937 287013379573131424215242448657497200865449 e=98464661256374630892086284690882085270486076002155835107689762206 8519688206657970542414362393177900446053078586741511518114761675067 7927458932061838092969 Khúa mt ca bn thõn ngi gii mó: -50- p=92343594743217655699573316203330770721607656932343597141635477560 2707472642653313475030286490646408577714604915189175748391998532970 7100980694230242270869 q=10000056967578631223639107524854108455014956112394001074339787086 0946451812686084687090378584228357622796245207684727585348319351268 64576166182903705351309 e=13002566485848744409115287829710428846531395126153927765608494299 4844778113095147632677239808273987193935964538728038475677155005905 78747234886383562164435 Giao din nhp khúa nh sau: Hỡnh 2.5 Giao din nhp khúa cho quỏ trỡnh kim tra ch ký v gii mó gii mó ta cn kim tra ch ký trc Nu ch ký c xỏc nhn thỡ ta mi cú th gii mó -51- Hỡnh 2.6 Ni dung ca file giaima.txt Khúa ca quỏ trỡnh mó húa ta cú th t nhp hoc sinh khúa -52- KT LUN Qua quỏ trỡnh lm ti, tỡm hiu v cỏc h mt mó ó giỳp em cú thờm nhiu kin thc mi v h mt mó, v ch ký in t v c bit l nhng ng dng ca nú thc t, hiu c cỏch mó húa v gii mó thụng tin ca mt s h mt mó Chng trỡnh thc hin mó húa c h mó RSA, thc hin ch ký s RSA vi s nguyờn ln Do chng trỡnh thc hin mó húa v gii mó bng cỏch c file nh phõn nờn khụng quan tõm file thuc loi file no Vỡ vy Chng trỡnh cú th mó hoỏ c hu ht cỏc file Tuy ó cú nhiu c gng nhng s hn ch v thi gian v kin thc chuyn mụn cng nh kinh nghim thc t nờn ti cũn mt s iu cha lm c nh: vi cỏc h mó cụng khai, s ln ó c gii quyt nhng nhng thut toỏn ca x lý s ln cha c ti u Do ú nh hng ti tc thc hin ca chng trỡnh Cui cựng, mt ln na em xin chõn thnh cm n cụ giỏo BI TH THANH XUN, ngi ó tn tỡnh ch bo em, hng dn v giỳp rt nhiu sut quỏ trỡnh lm ỏn Em xin chõn thnh cm n! -53- TI LIU THAM KHO [1] Thỏi Hng Vit, Phm Minh Vit, An ton thụng tin, NXB Khoa hc v k thut [2] Phm Huy in, H Huy Khoỏi, Mó húa thụng tin- c s toỏn hc v ng dng, Vin toỏn hc H Ni, nm 2003 [3] Nguyn Chớ Cụng, Giỏo trỡnh an ton bo mt h thng thụng tin, nm 2004 [4] Nguyn ng Dng, Lý thuyt mt mó, nm 2006 [5] - Bỏch khoa ton th Wikipedia http:// www Wikipedia org -54- Ph lc MT S M NGUN Mt s hm ca lp BigInteger: public BigInteger(long value) { data = new uint[maxLength]; long tempVal = value; dataLength = 0; while (value != && dataLength < maxLength) { data[dataLength] = (uint)(value & 0xFFFFFFFF); value >>= 32; dataLength++; } if (tempVal > 0) { if (value != || (data[maxLength - 1] & 0x80000000) != 0) throw (new ArithmeticException("Positive overflow in constructor.")); } else if (tempVal < 0) { if (value != -1 || (data[dataLength - 1] & 0x80000000) == 0) throw (new ArithmeticException("Negative underflow in constructor.")); } if (dataLength == 0) dataLength = 1; } public BigInteger(ulong value) { data = new uint[maxLength]; dataLength = 0; while (value != && dataLength < maxLength) { data[dataLength] = (uint)(value & 0xFFFFFFFF); value >>= 32; dataLength++; } if (value != || (data[maxLength - 1] & 0x80000000) != 0) throw (new ArithmeticException("Positive overflow in constructor.")); if (dataLength == 0) dataLength = 1; } //*********************************************************************** public BigInteger(BigInteger bi) -55- { data = new uint[maxLength]; dataLength = bi.dataLength; for (int i = 0; i < dataLength; i++) data[i] = bi.data[i]; } public BigInteger(string value, int radix) { BigInteger multiplier = new BigInteger(1); BigInteger result = new BigInteger(); value = (value.ToUpper()).Trim(); int limit = 0; if (value[0] == '-') limit = 1; for (int i = value.Length - 1; i >= limit; i ) { int posVal = (int)value[i]; if (posVal >= '0' && posVal = 'A' && posVal = radix) throw (new ArithmeticException("Invalid string in constructor.")); else { if (value[0] == '-') posVal = -posVal; result = result + (multiplier * posVal); if ((i - 1) >= limit) multiplier = multiplier * radix; } } if (value[0] == '-') // negative values { if ((result.data[maxLength - 1] & 0x80000000) == 0) throw (new ArithmeticException("Negative underflow in constructor.")); } else // positive values { if ((result.data[maxLength - 1] & 0x80000000) != 0) throw (new ArithmeticException("Positive overflow in constructor.")); } data = new uint[maxLength]; -56- for (int i = 0; i < result.dataLength; i++) data[i] = result.data[i]; dataLength = result.dataLength; } public static implicit operator BigInteger(long value) { return (new BigInteger(value)); } public static implicit operator BigInteger(ulong value) { return (new BigInteger(value)); } public static implicit operator BigInteger(int value) { return (new BigInteger((long)value)); } public static implicit operator BigInteger(uint value) { return (new BigInteger((ulong)value)); } public static BigInteger operator +(BigInteger bi1, BigInteger bi2) { BigInteger result = new BigInteger(); result.dataLength = (bi1.dataLength > bi2.dataLength) ? bi1.dataLength : bi2.dataLength; long carry = 0; for (int i = 0; i < result.dataLength; i++) { long sum = (long)bi1.data[i] + (long)bi2.data[i] + carry; carry = sum >> 32; result.data[i] = (uint)(sum & 0xFFFFFFFF); } if (carry != && result.dataLength < maxLength) { result.data[result.dataLength] = (uint)(carry); result.dataLength++; } while (result.dataLength > && result.data[result.dataLength 1] == 0) result.dataLength ; // overflow check int lastPos = maxLength - 1; if ((bi1.data[lastPos] & 0x80000000) == (bi2.data[lastPos] & 0x80000000) && (result.data[lastPos] & 0x80000000) != (bi1.data[lastPos] & 0x80000000)) { throw (new ArithmeticException()); } -57- return result; } public static BigInteger operator -(BigInteger bi1, BigInteger bi2) { BigInteger result = new BigInteger(); result.dataLength = (bi1.dataLength > bi2.dataLength) ? bi1.dataLength : bi2.dataLength; long carryIn = 0; for (int i = 0; i < result.dataLength; i++) { long diff; diff = (long)bi1.data[i] - (long)bi2.data[i] - carryIn; result.data[i] = (uint)(diff & 0xFFFFFFFF); if (diff < 0) carryIn = 1; else carryIn = 0; } // roll over to negative if (carryIn != 0) { for (int i = result.dataLength; i < maxLength; i++) result.data[i] = 0xFFFFFFFF; result.dataLength = maxLength; } // fixed in v1.03 to give correct datalength for a - (-b) while (result.dataLength > && result.data[result.dataLength 1] == 0) result.dataLength ; // overflow check int lastPos = maxLength - 1; if ((bi1.data[lastPos] & 0x80000000) != (bi2.data[lastPos] & 0x80000000) && (result.data[lastPos] & 0x80000000) != (bi1.data[lastPos] & 0x80000000)) { throw (new ArithmeticException()); } return result; } public static BigInteger operator *(BigInteger bi1, BigInteger bi2) { int lastPos = maxLength - 1; bool bi1Neg = false, bi2Neg = false; try { if ((bi1.data[lastPos] & 0x80000000) != 0) // bi1 negative { bi1Neg = true; bi1 = -bi1; } -58- if ((bi2.data[lastPos] & 0x80000000) != 0) // bi2 negative { bi2Neg = true; bi2 = -bi2; } } catch (Exception) { } BigInteger result = new BigInteger(); try { for (int i = 0; i < bi1.dataLength; i++) { if (bi1.data[i] == 0) continue; ulong mcarry = 0; for (int j = 0, k = i; j < bi2.dataLength; j++, k++) { // k = i + j ulong val = ((ulong)bi1.data[i] * (ulong)bi2.data[j]) + (ulong)result.data[k] + mcarry; result.data[k] = (uint)(val & 0xFFFFFFFF); mcarry = (val >> 32); } if (mcarry != 0) result.data[i + bi2.dataLength] = (uint)mcarry; } } catch (Exception) { throw (new ArithmeticException("Multiplication overflow.")); } result.dataLength = bi1.dataLength + bi2.dataLength; if (result.dataLength > maxLength) result.dataLength = maxLength; while (result.dataLength > && result.data[result.dataLength 1] == 0) result.dataLength ; // overflow check (result is -ve) if ((result.data[lastPos] & 0x80000000) != 0) { if (bi1Neg != bi2Neg && result.data[lastPos] == 0x80000000) { if (result.dataLength == 1) return result; else { bool isMaxNeg = true; for (int i = 0; i < result.dataLength - && isMaxNeg; i++) { if (result.data[i] != 0) isMaxNeg = false; -59- } if (isMaxNeg) return result; } } throw (new ArithmeticException("Multiplication overflow.")); } if (bi1Neg != bi2Neg) return -result; return result; } private static void multiByteDivide(BigInteger bi1, BigInteger bi2, BigInteger outQuotient, BigInteger outRemainder) { uint[] result = new uint[maxLength]; int remainderLen = bi1.dataLength + 1; uint[] remainder = new uint[remainderLen]; uint mask = 0x80000000; uint val = bi2.data[bi2.dataLength - 1]; int shift = 0, resultPos = 0; while (mask != && (val & mask) == 0) { shift++; mask >>= 1; } for (int i = 0; i < bi1.dataLength; i++) remainder[i] = bi1.data[i]; shiftLeft(remainder, shift); bi2 = bi2 0) { ulong dividend = ((ulong)remainder[pos] ((r_hat kk) { q_hat ; ss -= bi2; } BigInteger yy = kk - ss; for (int h = 0; h < divisorLen; h++) remainder[pos - h] = yy.data[bi2.dataLength - h]; result[resultPos++] = (uint)q_hat; pos ; j ; } outQuotient.dataLength = resultPos; int y = 0; for (int x = outQuotient.dataLength - 1; x >= 0; x , y++) outQuotient.data[y] = result[x]; for (; y < maxLength; y++) outQuotient.data[y] = 0; while (outQuotient.dataLength > && outQuotient.data[outQuotient.dataLength - 1] == 0) outQuotient.dataLength ; if (outQuotient.dataLength == 0) outQuotient.dataLength = 1; outRemainder.dataLength = shiftRight(remainder, shift); for (y = 0; y < outRemainder.dataLength; y++) outRemainder.data[y] = remainder[y]; for (; y < maxLength; y++) outRemainder.data[y] = 0; } Hm mó húa v gii mó ca lp RSA: public BigInteger Encrypt(byte x,BigInteger e1,BigInteger n) { BigInteger y; BigInteger x1 = new BigInteger((int)x); y = x1.modPow(e1, n); //y = Pow(x, e1, n); return y; } public BigInteger Encrypt1(BigInteger x, BigInteger d, BigInteger n) { -61- BigInteger y; y = x.modPow(d, n); //y = Pow(x, d, n); return y; } public byte Decrypt(BigInteger y, BigInteger d, BigInteger n) { //ulong x; BigInteger x; //x = Pow(y, d, n); x = y.modPow(d, n); byte[] x1 = x.getBytes(); return (byte)(x1[x1.Length-1]); } public BigInteger Decrypt1(BigInteger y, BigInteger d, BigInteger n) { BigInteger x; x = y.modPow(d, n); //x = Pow(y, d, n); return x; } -62- NHN XẫT CA GIO VIấN HNG DN -63-

Ngày đăng: 03/08/2016, 16:04

Tài liệu cùng người dùng

Tài liệu liên quan