Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 63 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
63
Dung lượng
1,31 MB
Nội dung
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-