加密解密密钥
❶ 璇疯В閲婂埯濮嫔瘑阍ャ佷细璇濆瘑阍ャ佸瘑阍ュ姞瀵嗗瘑阍ャ佷富瀵嗛挜鏄濡备綍閰嶅悎瀹炵幇淇濆瘑阃氢俊镄勶纻
鍦ㄤ缭瀵嗛氢俊涓锛屽埯濮嫔瘑阍ャ佷细璇濆瘑阍ャ佸瘑阍ュ姞瀵嗗瘑阍ュ拰涓诲瘑阍ユ槸鐢ㄤ簬瀹炵幇锷犲瘑鍜岃В瀵嗙殑鍏抽敭瑕佺礌銆备互涓嬫槸瀹冧滑镄勪綔鐢ㄥ拰濡备綍鍗忓悓宸ヤ綔镄勮В閲婏细
1. 鍒濆嫔瘑阍ワ纸Initial Key锛夛细鍒濆嫔瘑阍ユ槸锷犲瘑绯荤粺镄勮捣镣广傚畠鏄涓涓闅忔満鐢熸垚镄勫瘑阍ワ纴鐢ㄤ簬鍒濆嫔寲锷犲瘑绠楁硶銆傞氩父𨱍呭喌涓嬶纴鍒濆嫔瘑阍ュ彧鍦ㄧ郴缁熻剧疆鎴栭氢俊鍙屾柟寤虹珛鍒濆嬭繛鎺ユ椂浣跨敤锛岃屼笉鐢ㄤ簬瀹为檯镄勫姞瀵嗛氢俊杩囩▼銆傚埯濮嫔瘑阍ラ氩父鐢卞弻鏂逛簨鍏堢害瀹氩苟瀹夊叏鍦颁氦鎹銆
2. 浼氲瘽瀵嗛挜锛圫ession Key锛夛细浼氲瘽瀵嗛挜鏄鍦ㄩ氢俊浼氲瘽链熼棿鐢熸垚镄勪复镞跺瘑阍ャ傚畠鐢ㄤ簬锷犲瘑鍜岃В瀵嗗疄闄呯殑阃氢俊鏁版嵁銆备细璇濆瘑阍ラ氩父鏄浣跨敤瀵嗛挜鍗忓晢鍗忚锛埚侱iffie-Hellman锛夊湪阃氢俊鍙屾柟涔嬮棿鍗忓晢鐢熸垚镄勚傝ュ岗璁鍏佽搁氢俊鍙屾柟鍦ㄤ笉鐩存帴浼犺緭浼氲瘽瀵嗛挜镄勬儏鍐典笅锛岄氲繃鍏寮镄勯氶亾瀹夊叏鍦扮敓鎴愬叡浜镄勪细璇濆瘑阍ャ傜敓鎴愮殑浼氲瘽瀵嗛挜鍦ㄩ氢俊杩囩▼涓鐢ㄤ簬锷犲瘑鍜岃В瀵嗘暟鎹锛岄氢俊缁撴潫钖庨氩父浼氲涓㈠纯銆
3. 瀵嗛挜锷犲瘑瀵嗛挜锛𪢮ey Encryption Key锛夛细瀵嗛挜锷犲瘑瀵嗛挜鏄鐢ㄤ簬锷犲瘑鍜岃В瀵嗕细璇濆瘑阍ョ殑瀵嗛挜銆傚湪阃氢俊鍙屾柟杩涜屼细璇濆瘑阍ュ岗鍟嗘椂锛屼负浜嗙‘淇濅细璇濆瘑阍ョ殑瀹夊叏浼犺緭锛岄氩父浣跨敤瀵嗛挜锷犲瘑瀵嗛挜瀵逛细璇濆瘑阍ヨ繘琛屽姞瀵嗐傚瘑阍ュ姞瀵嗗瘑阍ユ槸鎻愬墠绾﹀畾濂藉苟淇濆瓨鍦ㄩ氢俊鍙屾柟涔嬮棿镄勶纴鐢ㄤ簬锷犲瘑鍜岃В瀵嗕细璇濆瘑阍ョ殑杩囩▼銆
4. 涓诲瘑阍ワ纸Master Key锛夛细涓诲瘑阍ユ槸鐢ㄤ簬鐢熸垚鍜岀$悊浼氲瘽瀵嗛挜鍜屽瘑阍ュ姞瀵嗗瘑阍ョ殑閲嶈佸瘑阍ャ备富瀵嗛挜阃氩父鏄鍦ㄧ郴缁熻剧疆鎴栭氢俊鍙屾柟寤虹珛鍒濆嬭繛鎺ユ椂鐢熸垚镄勶纴骞剁敱瀹夊叏镄勫瘑阍ョ$悊链烘瀯杩涜岀$悊銆备富瀵嗛挜鐢ㄤ簬鐢熸垚浼氲瘽瀵嗛挜鍜屽瘑阍ュ姞瀵嗗瘑阍ワ纴骞剁‘淇濊繖浜涘瘑阍ョ殑瀹夊叏镐с备富瀵嗛挜阃氩父鏄镟撮暱銆佹洿澶嶆潅镄勫瘑阍ワ纴鐢ㄤ簬淇濇姢阃氢俊绯荤粺镄勫畨鍏ㄣ
鍦ㄤ缭瀵嗛氢俊涓锛屽埯濮嫔瘑阍ュ拰涓诲瘑阍ョ敤浜庡缓绔嫔畨鍏ㄧ殑鍒濆嬭繛鎺ュ苟纭淇濈郴缁熺殑鏁翠綋瀹夊叏镐с傞氲繃浣跨敤涓诲瘑阍ョ敓鎴愬拰绠$悊浼氲瘽瀵嗛挜鍜屽瘑阍ュ姞瀵嗗瘑阍ワ纴纭淇濅简阃氢俊杩囩▼涓镄勪复镞跺瘑阍ョ殑瀹夊叏镐у拰闅忔満镐с备细璇濆瘑阍ョ敤浜庡姞瀵嗗拰瑙e瘑瀹为檯镄勯氢俊鏁版嵁锛岃屽瘑阍ュ姞瀵嗗瘑阍ョ敤浜庡畨鍏ㄥ湴浼犺緭浼氲瘽瀵嗛挜銆傝繖镙凤纴阃氲繃鍗忓悓宸ヤ綔锛屽埯濮嫔瘑阍ャ佷细璇濆瘑阍ャ佸瘑阍ュ姞瀵嗗瘑阍ュ拰涓诲瘑阍ュ叡钖屽疄鐜颁简淇濆瘑阃氢俊镄勭洰镙囥
❷ 锷犲瘑绠楁硶镄勫瘑阍ユ槸浠涔
瀵嗛挜鏄涓绉嶅弬鏁帮纴瀹冩槸鍦ㄦ槑鏂囱浆鎹涓哄瘑鏂囨垨灏嗗瘑鏂囱浆鎹涓烘槑鏂囩殑绠楁硶涓杈揿叆镄勫弬鏁帮纴澶氱敤浜庣绣缁滀腑锛岀敤𨱒ヤ缭鎶や釜浜洪殣绉佺瓑闂棰桡纴缁存姢缃戠粶浣跨敤瀹夊叏銆备竴鑸𨱒ヨ村瘑阍ュ姞瀵嗙殑鏂规硶链変笁绉岖被鍨嬶细瀵圭О锷犲瘑銆侀潪瀵圭О锷犲瘑鍜孒ash锷犲瘑銆
涓銆佸圭О锷犲瘑
鍙浣跨敤浜嗕竴涓瀵嗛挜杩涜屽姞瀵呜В瀵嗭纴涔熷彲浠ュ彨锅氩崟瀵嗛挜锷犲瘑銆傚畠瀵瑰瘑阍ユ湰韬娌℃湁鐗规畩镄勮佹眰锛岄氢俊鍙屾柟鍙瑕佹湁涓涓鐩稿悓镄勫瘑阍ュ氨琛岋纴涓涓鐢ㄦ埛鎶婅嚜宸遍渶瑕佸彂阃佺殑鏁版嵁阃氲繃瀵嗛挜锷犲瘑鎴愭贩涔辩殑淇℃伅锛屾帴鍙楁柟浣跨敤鐩稿悓镄勫瘑阍ユ妸鎺ュ弹鍒扮殑淇℃伅杩桦师鎴愬师濮嬫暟鎹锛岃繖涓鏂规硶鍙浠ュ湪鏋佺煭镄勬椂闂村唴瀵瑰ぇ閲忎俊鎭杩涜屽姞瀵呜В瀵嗐备絾鏄濡傛灉瀵嗛挜鍦ㄤ紶杈撹繃绋嬩腑灏辫鎴銮凤纴闾d箞浠ュ悗镄勫姞瀵呜繃绋嫔氨褰㈠悓铏氲俱傝繖涓鏂规硶镄勪紭镣规槸浣跨敤钖屼竴涓瀵嗛挜鑺傜渷浜嗗姞瀵呜В瀵嗘墍闇镄勬椂闂达纴浣嗘槸镞犳硶淇濊瘉瀵嗛挜镄勫畨鍏ㄦс
浜屻侀潪瀵圭О锷犲瘑
鍦ㄥ姞瀵嗗拰瑙e瘑涓浣跨敤浜嗕竴瀵瑰瘑阍ワ纴涓涓鏄鍏鐢ㄥ瘑阍ワ纴瀹冨瑰栧叕寮鍙戝竷锛屽彟涓涓鏄绉佹湁瀵嗛挜锛岀敱鐢ㄦ埛镊宸变缭瀛樸备粠鐞呜轰笂璁诧纴杩欑嶅姞瀵嗘柟寮忓彧瑕佹槸鐢ㄦ埛镄勭佹湁瀵嗛挜娌℃湁涓㈠け鎴栬呰绐冿纴闾d箞浠栦滑涔嬮棿锷犲瘑镄勪俊鎭鏄缁濆逛笉浼氲镰磋В镄勚备絾鏄瀹幂殑缂虹偣涔熼潪甯告槑鏄撅纴灏辨槸锷犲瘑阃熷害闱炲父缂撴参銆傜敱浜庤佽繘琛屽ぇ閲忕殑鏁板﹁繍绠楋纴鍗充娇锷犲瘑灏戦噺镄勪俊鎭涔熼渶瑕佽姳璐瑰ぇ閲忕殑镞堕棿銆
涓夈丠ash锷犲瘑
鏄阃氲繃鏁板﹁繍绠楋纴鎶娄笉钖岄暱搴︾殑淇℃伅杞鍖栧埌128浣岖紪镰佷腑锛屽舰鎴怘ash鍊硷纴阃氲繃姣旇缉杩欎釜鏁板兼槸钖︽g‘锛屾潵纭瀹氶氢俊鍙屾柟镄勫悎娉曟с傝繖涔熷彲浠ヨ存槸鏁板瓧绛惧悕锛屽湪鏁版嵁浼犺緭钖庯纴鍙浠ラ氲繃姣旇缉Hash鍊兼潵鍒ゆ柇淇℃伅阃斾腑鏄钖﹁鎴銮蜂慨鏀癸纴鏄钖︾敱钖堟硶镄勫彂阃佷汉鍙戦佹垨钥呭悎娉旷殑鎺ユ敹浜烘帴鏀剁瓑銆傜敤杩欑嶆柟娉曪纴鍙浠ラ槻姝㈠瘑阍ヤ涪澶辩殑闂棰桡纴鍏锋湁涓嶅彲鎶佃禆镐с傚緢阃傜敤浜庡晢涓氢俊鎭镄勪紶阃掋
❸ 加密密钥可不可以解密
数字签名是用用私钥加密,用公钥解密。一般的传输加密时公钥加密,私钥解密。都是不对称加密算法。
以下是找的关于数字签名的一些资料:
对文件进行加密只解决了传送信息的保密问题,而防止他人对传输的文件进行破坏,以及如何确定发信人的身份还需要采取其它的手段,这一手段就是数字签名。在电子商务安全保密系统中,数字签名技术有着特别重要的地位,在电子商务安全服务中的源鉴别、完整性服务、不可否认服务中,都要用到数字签名技术。在电子商务中,完善的数字签名应具备签字方不能抵赖、他人不能伪造、在公证人面前能够验证真伪的能力。
实现数字签名有很多方法,目前数字签名采用较多的是公钥加密技术,如基于RSA Date Security 公司的PKCS(Public Key Cryptography Standards)、Digital Signature Algorithm、x.509、PGP(Pretty Good Privacy)。1994年美国标准与技术协会公布了数字签名标准而使公钥加密技术广泛应用。公钥加密系统采用的是非对称加密算法。
目前的数字签名是建立在公共密钥体制基础上,它是公用密钥加密技术的另一类应用。它的主要方式是,报文的发送方从报文文本中生成一个128位的散列值(或报文摘要)。发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。然后,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先从接收到的原始报文中计算出128位的散列值(或报文摘要),接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。
在书面文件上签名是确认文件的一种手段,其作用有两点:第一,因为自己的签名难以否认,从而确认了文件已签署这一事实;第二,因为签名不易仿冒,从而确定了文件是真的这一事实。
数字签名与书面文件签名有相同之处,采用数字签名,也能确认以下两点:第一,信息是由签名者发送的;第二,信息自签发后到收到为止未曾作过任何修改。这样数字签名就可用来防止电子信息因易被修改而有人作伪,或冒用别人名义发送信息。或发出(收到)信件后又加以否认等情况发生。
应用广泛的数字签名方法主要有三种,即:RSA签名、DSS签名和Hash签名。这三种算法可单独使用,也可综合在一起使用。数字签名是通过密码算法对数据进行加、解密变换实现的,用DES算去、RSA算法都可实现数字签名。但三种技术或多或少都有缺陷,或者没有成熟的标准。
用RSA或其它公开密钥密码算法的最大方便是没有密钥分配问题(网络越复杂、网络用户越多,其优点越明显)。因为公开密钥加密使用两个不同的密钥,其中有一个是公开的,另一个是保密的。公开密钥可以保存在系统目录内、未加密的电子邮件信息中、电话黄页(商业电话)上或公告牌里,网上的任何用户都可获得公开密钥。而私有密钥是用户专用的,由用户本身持有,它可以对由公开密钥加密信息进行解密。
RSA算法中数字签名技术实际上是通过一个哈希函数来实现的。数字签名的特点是它代表了文件的特征,文件如果发生改变,数字签名的值也将发生变化。不同的文件将得到不同的数字签名。一个最简单的哈希函数是把文件的二进制码相累加,取最后的若干位。哈希函数对发送数据的双方都是公开的。
DSS数字签名是由美国国家标准化研究院和国家安全局共同开发的。由于它是由美国政府颁布实施的,主要用于与美国政府做生意的公司,其他公司则较少使用,它只是一个签名系统,而且美国政府不提倡使用任何削弱政府窃听能力的加密软件,认为这才符合美国的国家利益。
Hash签名是最主要的数字签名方法,也称之为数字摘要法(Digital Digest)或数字指纹法(Digital Finger Print)。它与RSA数字签名是单独的签名不同,该数字签名方法是将数字签名与要发送的信息紧密联系在一起,它更适合于电子商务活动。将一个商务合同的个体内容与签名结合在一起,比合同和签名分开传递,更增加了可信度和安全性。数字摘要(Digital Digest)加密方法亦称安全Hash编码法(SHA:Secure Hash Algorithm)或MD5(MD Standard For Message Digest),由RonRivest所设计。该编码法采用单向Hash函数将需加密的明文“摘要”成一串128bit的密文,这一串密文亦称为数字指纹(Finger Print),它有固定的长度,且不同的明文摘要必定一致。这样这串摘要使可成为验证明文是否是“真身”的“指纹”了。
只有加入数字签名及验证才能真正实现在公开网络上的安全传输。加入数字签名和验证的文件传输过程如下:
(1)发送方首先用哈希函数从原文得到数字签名,然后采用公开密钥体系用发达方的私有密钥对数字签名进行加密,并把加密后的数字签名附加在要发送的原文后面;
(2)发送一方选择一个秘密密钥对文件进行加密,并把加密后的文件通过网络传输到接收方;
(3)发送方用接收方的公开密钥对密秘密钥进行加密,并通过网络把加密后的秘密密钥传输到接收方;
(4)接受方使用自己的私有密钥对密钥信息进行解密,得到秘密密钥的明文;
(5)接收方用秘密密钥对文件进行解密,得到经过加密的数字签名;
(6)接收方用发送方的公开密钥对数字签名进行解密,得到数字签名的明文;
(7)接收方用得到的明文和哈希函数重新计算数字签名,并与解密后的数字签名进行对比。如果两个数字签名是相同的,说明文件在传输过程中没有被破坏。
如果第三方冒充发送方发出了一个文件,因为接收方在对数字签名进行解密时使用的是发送方的公开密钥,只要第三方不知道发送方的私有密钥,解密出来的数字签名和经过计算的数字签名必然是不相同的。这就提供了一个安全的确认发送方身份的方法。
安全的数字签名使接收方可以得到保证:文件确实来自声称的发送方。鉴于签名私钥只有发送方自己保存,他人无法做一样的数字签名,因此他不能否认他参与了交易。
数字签名的加密解密过程和私有密钥的加密解密过程虽然都使用公开密钥体系,但实现的过程正好相反,使用的密钥对也不同。数字签名使用的是发送方的密钥对,发送方用自己的私有密钥进行加密,接收方用发送方的公开密钥进行解密。这是一个一对多的关系:任何拥有发送方公开密钥的人都可以验证数字签名的正确性,而私有密钥的加密解密则使用的是接收方的密钥对,这是多对一的关系:任何知道接收方公开密钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有密钥的人才能对信息解密。在实用过程中,通常一个用户拥有两个密钥对,一个密钥对用来对数字签名进行加密解密,一个密钥对用来对私有密钥进行加密解密。这种方式提供了更高的安全性。
❹ rsa加密解密算法
1978年就出现了这种算法,它是第一个既能用于数据加密
也能用于数字签名的算法。它易于理解和操作,也很流行。算
法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和
Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。
RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数
( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文
推断出明文的难度等同于分解两个大素数的积。
密钥对的产生:选择两个大素数,p 和q 。计算:
n = p * q
然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 )
互质。最后,利用Euclid 算法计算解密密钥d, 满足
e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )
其中n和d也要互质。数e和
n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任
何人知道。 加密信息 m(二进制表示)时,首先把m分成等长数据
块 m1 ,m2,..., mi ,块长s,其中 2^s <= n, s 尽可能的大。对
应的密文是:
ci = mi^e ( mod n ) ( a )
解密时作如下计算:
mi = ci^d ( mod n ) ( b )
RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )
式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先
作 HASH 运算。
RSA 的安全性。
RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理
论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在
一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,
RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显
然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,
模数n必须选大一些,因具体适用情况而定。
RSA的速度:
由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论
是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据
加密。
RSA的选择密文攻击:
RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装
(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信
息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保
留了输入的乘法结构:
( XM )^d = X^d *M^d mod n
前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征
--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有
两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体
任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不
对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction
对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不
同类型的攻击方法。
RSA的公共模数攻击。
若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险
的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互
质,那末该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥
为e1和e2,公共模数是n,则:
C1 = P^e1 mod n
C2 = P^e2 mod n
密码分析者知道n、e1、e2、C1和C2,就能得到P。
因为e1和e2互质,故用Euclidean算法能找到r和s,满足:
r * e1 + s * e2 = 1
假设r为负数,需再用Euclidean算法计算C1^(-1),则
( C1^(-1) )^(-r) * C2^s = P mod n
另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数
的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它
成对的e’和d’,而无需分解模数。解决办法只有一个,那就是不要共享
模数n。
RSA的小指数攻击。 有一种提高
RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度
有所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各
种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难
度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性
能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。
RSA的缺点主要有:
A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次
一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits
以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;
且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长
的密钥,其他实体使用1024比特的密钥。
❺ 简述RSA算法中密钥的产生,数据加密和解密的过程,并简单说明RSA算法安全性的原理。
RSA算法的数学原理
RSA算法的数学原理:
先来找出三个数, p, q, r,
其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数。
p, q, r 这三个数便是 private key。接着, 找出m, 使得 rm == 1 mod (p-1)(q-1)..... 这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了..... 再来, 计算 n = pq....... m, n 这两个数便是 public key。
编码过程是, 若资料为 a, 将其看成是一个大整数, 假设 a < n.... 如果 a >= n 的话, 就将 a 表成 s 进位 (s <= n, 通常取 s = 2^t), 则每一位数均小于 n, 然后分段编码...... 接下来, 计算 b == a^m mod n, (0 <= b < n), b 就是编码后的资料...... 解码的过程是, 计算 c == b^r mod pq (0 <= c < pq), 于是乎, 解码完毕...... 等会会证明 c 和 a 其实是相等的 :) 如果第三者进行窃听时, 他会得到几个数: m, n(=pq), b...... 他如果要解码的话, 必须想办法得到 r...... 所以, 他必须先对 n 作质因数分解......... 要防止他分解, 最有效的方法是找两个非常的大质数 p, q, 使第三者作因数分解时发生困难......... <定理> 若 p, q 是相异质数, rm == 1 mod (p-1)(q-1), a 是任意一个正整数, b == a^m mod pq, c == b^r mod pq, 则 c == a mod pq 证明的过程, 会用到费马小定理, 叙述如下: m 是任一质数, n 是任一整数, 则 n^m == n mod m (换另一句话说, 如果 n 和 m 互质, 则 n^(m-1) == 1 mod m) 运用一些基本的群论的知识, 就可以很容易地证出费马小定理的........ <证明> 因为 rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整数 因为在 molo 中是 preserve 乘法的 (x == y mod z and u == v mod z => xu == yv mod z), 所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1) mod pq 1. 如果 a 不是 p 的倍数, 也不是 q 的倍数时, 则 a^(p-1) == 1 mod p (费马小定理) => a^(k(p-1)(q-1)) == 1 mod p a^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q 所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 => pq | a^(k(p-1)(q-1)) - 1 即 a^(k(p-1)(q-1)) == 1 mod pq => c == a^(k(p-1)(q-1)+1) == a mod pq 2. 如果 a 是 p 的倍数, 但不是 q 的倍数时, 则 a^(q-1) == 1 mod q (费马小定理) => a^(k(p-1)(q-1)) == 1 mod q => c == a^(k(p-1)(q-1)+1) == a mod q => q | c - a 因 p | a => c == a^(k(p-1)(q-1)+1) == 0 mod p => p | c - a 所以, pq | c - a => c == a mod pq 3. 如果 a 是 q 的倍数, 但不是 p 的倍数时, 证明同上 4. 如果 a 同时是 p 和 q 的倍数时, 则 pq | a => c == a^(k(p-1)(q-1)+1) == 0 mod pq => pq | c - a => c == a mod pq Q.E.D. 这个定理说明 a 经过编码为 b 再经过解码为 c 时, a == c mod n (n = pq).... 但我们在做编码解码时, 限制 0 <= a < n, 0 <= c < n, 所以这就是说 a 等于 c, 所以这个过程确实能做到编码解码的功能.....