隐匿信息查询是隐私技术中一种常用的应用范式,而不经意传输(OT协议)是实现隐匿信息查询功能的原理。技术基础实际上是对RSA、AES等非对称/对称加密技术的组合运用。
系统流程
隐匿信息查询.png代码
依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
客户端:
package com.wangan;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.digest.DigestAlgorithm;
import cn.hutool.crypto.digest.Digester;
import cn.hutool.crypto.symmetric.AES;
import com.wangan.rsa.RSA;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
public class Client {
private static int num = 6; //想查的编号
private static BigInteger aesKey = new BigInteger(
"29552253920430244480935420141729228591524107699469182582408239360121179899450577101476579710345554967100561598716023732513996495299410141662749947786005937244656977738527833097623686415626468060988878281679146322528426363279034015388479917760840595285028058423329215856830057760069403267618402231064409756303753621261963998813245801555345709331865159424057596639080245793103551936729636763453083968195850372838520989535777891088951977529791342466901072485266582229616711047022114660121787354697672738075015287123936759958670135509278509350942132843134489493757755637523878155960314647723130468403810490573692371076668554081340711245013791760785972574183759777397663251563223522608282216156466237180692442271370955990451855629775212854995231450914759478136490035502825158538196415358501643051890005641780888343155829469962364157099845810220506084696098509487269528261738091603323397419416656531789855253870506832308483358363624293730162838161876883346182295801408785755959876699692983735536512143262257444692944221679236546240285743514676999000313320454652069198094628016190512249847885741233538694420190674827537926410498871218493798919040337011039226994754553313541467307192132768688698365695235674392298409676883545188918324372058782178620981923190334246098709749931778763297900223981313803899058107970787765589467633684966955996721171175415015860487524541409512786880456374877432683366318130671454224149144855682834737499745953873548378153316742130648196857516669493425502266531024732408366848110881647");
//随机大整数,也即AES密钥
public static void main(String[] args) {
//1、启动服务端,生成10个密钥对
Server server = new Server();
Thread t = new Thread(server);
t.start();
//2、用特定公钥去加密对称密钥
BigInteger[][] pks = server.getPks();
BigInteger[] pkt = pks[num-1]; //用4号公钥
System.out.println("2【客户端】选择" + num + "号女嘉宾,公钥:" + ArrayUtil.toString(pkt));
RSA rsa = new RSA();
BigInteger s_aesKey = rsa.encrypt(aesKey, pkt);
System.out.println("2【客户端】aesKey是:" + aesKey + "," + num + "号公钥加密后的aesKey:" + s_aesKey);
// (3、服务端会用所有的私钥去尝试解密客户端传来的加密的对称密钥; 4、服务端会用这10个对称密钥尝试去加密业务数据)
String[] data_encrypt = new String[10];
try {
data_encrypt = server.getDataCryptWithAes(s_aesKey);
System.out.println("5【客户端】获得密文数组:" + ArrayUtil.toString(data_encrypt));
//5、从服务端取得10个加密数据,用对称密钥去解密,只有一个可以解密成功
Digester digester = new Digester(DigestAlgorithm.SHA256);
byte[] sha256Key = digester.digest(aesKey.toByteArray());
AES aes = new AES(Mode.ECB, Padding.PKCS5Padding, sha256Key);
String decryptData = aes.decryptStr(data_encrypt[num-1]);
System.out.println("5【客户端】解密得到第"+ num + "号女嘉宾的身高是" + decryptData);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}finally {
server.countdown();
}
}
}
服务端:
package com.wangan;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.digest.DigestAlgorithm;
import cn.hutool.crypto.digest.Digester;
import cn.hutool.crypto.symmetric.AES;
import com.wangan.rsa.RSA;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.SecureRandom;
import java.util.concurrent.CountDownLatch;
public class Server implements Runnable{
private CountDownLatch latch = new CountDownLatch(1);
private int NUMS = 10; //一共多少个人
private BigInteger[][] pks = new BigInteger[10][]; //公钥
private BigInteger[][] sks = new BigInteger[10][]; //私钥
private String s_aesKey; //客户端传来的加密后的对称密钥
private static String[] data = {"168", "160","162","172","158",
"164","159","167","161","160"}; //女嘉宾个人数据,身高
private static String[] data_encrypt = new String[10];
public Server(){
super();
//1、生成10个密钥对
genKeyPairs();
}
/**根据客户端传来的加密后的aes密钥,用所有私钥解密、会得到10个aes密钥(只有1个真的),然后用解密后的aes密钥去加密对应的业务密文。
* 得到10份密文返回给客户端,客户端只能解密其中一份
* */
public String[] getDataCryptWithAes(BigInteger s_aesKey) throws UnsupportedEncodingException {
//3、用所有的私钥去尝试解密客户端传来的加密的对称密钥
System.out.println("3【服务端】用所有的私钥去尝试解密客户端传来的加密的对称密钥");
BigInteger[] keys = new BigInteger[10];
for(int i=0; i<sks.length; i++){
RSA rsa = new RSA();
BigInteger key = null;
try{
key = rsa.decrypt(s_aesKey, sks[i]);
//System.out.println("解密AES密钥成功:" + key);
}catch (Exception e){
System.out.println("解密AES密钥失败");
}
keys[i] = key;
}
System.out.println("3【服务端】解密后的10个对称密钥:" + ArrayUtil.toString(keys));
//4、用这10个对称密钥尝试去加密业务数据
for(int j=0; j< data.length; j++){
Digester digester = new Digester(DigestAlgorithm.SHA256);
byte[] sha256Key = digester.digest(keys[j].toByteArray());
//System.out.println("解密后aes密钥," + sha256Key.length);
AES aes = new AES(Mode.ECB, Padding.PKCS5Padding, sha256Key);
String encryptData = aes.encryptBase64(data[j]);
data_encrypt[j] = encryptData;
}
System.out.println("4【服务端】加密后女嘉宾数据:" + ArrayUtil.toString(data_encrypt));
return data_encrypt;
}
private void genKeyPairs(){
for(int i=0; i<NUMS; i++){
/*KeyPair pair = SecureUtil.generateKeyPair("RSA");
String privateKey = Base64.encode(pair.getPrivate().getEncoded());
String publicKey = Base64.encode(pair.getPublic().getEncoded());
pks[i] = publicKey;
sks[i] = privateKey;*/
SecureRandom rnd=new SecureRandom();
BigInteger p = BigInteger.probablePrime(2500, rnd);
BigInteger q = BigInteger.probablePrime(2500, rnd);
//System.out.println("p=" + p);
//System.out.println("q=" + q);
com.wangan.rsa.RSA rsa = new com.wangan.rsa.RSA();
// 生成公钥私钥
// pubkey, selfkey = gen_key(p, q)
BigInteger[][] keys = rsa.genKey(p, q);
BigInteger[] pubkey = keys[0];
BigInteger[] selfkey = keys[1];
pks[i] = pubkey;
sks[i] = selfkey;
}
System.out.println("1【服务端】公钥:" + ArrayUtil.toString(pks));
System.out.println("1【服务端】私钥:" + ArrayUtil.toString(sks));
}
public BigInteger[][] getPks(){
return pks;
}
public void countdown(){
latch.countDown();
}
@Override
public void run() {
try {
latch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
步骤:
1、服务端生成10个RSA密钥对
2、客户端用特定公钥去加密AES密钥
3、服务端会用所有的私钥去尝试解密客户端传来的加密的AES对称密钥
4、服务端会用这10个解密出来的AES对称密钥尝试去加密业务数据
5、客户端从服务端取得10个加密数据,用自己的AES对称密钥去解密,只有一个可以解密成功
输出:
1【服务端】公钥:[[95468039368294345616149383540232391378790055887795990728777150610338090538279189691255649687783085390091037473900676097068408183865512462305989509547819309931526854599849200796401234099777679874093116991773774271433177173377975785869129227690945510742845256503404572778947641982454553091352219487247847761139713817159606012970084125074020285939587846810354191121294213363658515082255106288415076510419765649670608743916541698800723863698352760575255255636001450547244910674888813034947154015572315232763399308332739554069280526016456447992961968775977572084293710223014957270308471253351667405577468871842218445273438136555963329796566819160443920388743133047828795360914234428116068631574933409456248402789981877594500124452711009153565311906131010194919162693896698771213422186883241221796212340933142277382965282461523786008904170462305011191991065904383730459663531451335220044451397991412577682421097462638028979243884402623804931684525711501995416939367648952571450955617704165088699815777326445972349382408107389096411402876692186449879604784993478990124474641088775406705130739426884866211509014592150384959705444179478789409989280956711182669860738043522891194886286353105160386760271558895845263652870060978033809404018633438704167096264816104314396069005262502592752646023070166809545456605340801419729808709817607001238237351174480231707053803969877830431707843415337581212785493022028291797365157983207698065305442218519550105857390824995148786281173961889459737643967970068720097675856314579, 65537], [63696070335349059315781390754663342996566124431288293327326731268432159846619356589799026883783792595574173295839374715226148249191085676984678476315177874992132213787088142513771711275837563899061695691854610010864636286367102970776600237942198427247862436536055746355544473439842647320627715171191215456607347233936243718446752167865311249018460140056825421241655608034336385352171203360369124514385920150427065345237092511393420170678062121768692414230500175059035770899595381014542505991072183392321338371417287617779862863105000436230610293586951510498652499969548866411322285780557398880673470212287742739998875950368303224377356562006121770204922740803405918995433443487399571396663089860204832121820698096349739568530699365168120589107903173116230629651789305699817594057741041892082898115616879300083248723569449468424270756143171972368852859105353903763744306595946808602728181627989294683549718787019843082885754055106678716926974186909539408528594332761013971368649102652326202631862955763740752802179348684217231724764349639659739542555548676471086185143135206794835780999666386193991621001719822311945432568528143689358762315107011606749122933899906099461502255114147563346013798594985503301754389914599333436348150326037293124496641879443198093631260738865173812938664795766496393834515022170067356229191473420226463520983129548737962062403692843059788053897923034216970305881319013052907073088844849965642585991987566630074459380504329430622146542362658723886809561318503281712209718227753, 65537], [57982321888849391521701081778595078450386335944324134668170630566320654798414630288120221512046397526219639090220840685595497974216271869369460654132203581970455585848620669167136293446713117293534879149542809297235053269788836874277903519427201981989380131480336201993764552446182258828980787123922147767760600604569888328112358752812710823537806280787867299680220418793749239501309499324473943079244598543026358031783464265867354930289539525164379364615798840605833312498222232793984957096762903608989434417265153637799365660771056399926103716937150100427785765338257998634104695373067465262471477647335348984503258859885809114858880355580737920776542629783067918656013892321273866068315118839398641882770399121317275266122237054497771679732114462457606155689268989110032535718261305772175787771014349017901407445697294529568244131425741190021338103131349662041224951966627398541662993630467459675565522569979397708942943051990306226553241433841308254911398413110577150557295207932648668404587875615006658647564348935632084588789009495788599801874635939788769936813370913442017913316987231868752071761581814334296139597787676149618837161338048393055158517463990448514460068625681378651067776397897806082237668980056419511366057602130945120038698081809127754423463136264619377554261567170669622972808693644589838256140385524556551161869308614519494767860185998258027233637982984491546247721917422165487381102871184505204626826362048946435360863829379511770254058353565624177384869094053343443224560617371, 65537], [78844760878078227689620813942925471194781624427971497229534702408186997425876470187382237838572978801934579182118369479293486789888670503631088250866120901315329895556023089744135862810157684389037650848008363459819104579985054401489755844768126625219157613289105120550722526143165607920599293883888425744971023650974803710418781638746245716361562293218983421904863973147604219238001597213703958451831470070111956234246266455895876860053260138213404490676444859071102672389633232448731715985825658011349723686785128481802094948557425032906195977295547616520154800534014471797245624832383004562746378327473408503035538854790628538495218795329355437598753230423002867359819218710343354471497473186377611334400715059557479495570781375227626719530500206823386571390572755482655873243618533375173685002075574476244162450633398730390577504083383046717933552648943930286864667430932297334388273111414568801400368027470144482935495102692091738158271924185122573077030310364902306175351166077881376461135708228957019076436681843639312775925006049691901999520845891393540900041213118996463109255282861783161342157052105729732543032076192253138510490341865513464260587698999384969615098123527331390726783950175609918942155900385412163685523564491181443471403432599537463046593045542231321154458597421790885489186505351878157162470884003070699800580140277104127195974648130572106228622851918517864138497760611141133367395280299130049125184577196099614024080843362676617185173800585367956665998135614244937788328533819, 65537], [100964715668909978360066366155786809370840818555033684845981568214756418362095692607025065484617742412595545609020148630685938178337091716386924795550454140480346051018369105320194586629675550096639914593669122094132145041261422371849772817104528185776441773631994315617329144560766321774120465881915607184711744511916889714171005858293682633466079338307349463464265517223604713396702772385827822666413490181045186527211334918194230505794658242860077510898912858252544603158644197063626858065366216800815863786343208764978159329622119297220024800281460524797106634114719753694576570409269635971123359090348779906105325992276902745880915840645351291981847541600941097187231722631991886396811711867811142757816817540301862280064828378828056284256834552312048054363733156614783065947273394597915665949154578145586439614824587267467959655949035110507322064105533555108574610697418423139061561863066919130373644611443090377940500914801655094596235115903277695080937313487824850468748516916301442279151818717315312431327616868299547487668691805137438235959968645798809976688281831882867701925567422895607934861394838828623865271301404857627900926328055120147120664601353476891452244805854488871369196664297988287883524558313038350906300777890797052375634133287807291780884839500024993304183783015118167817936337096240100767862353246167189823991403969435257351577069918753750464915564096997309786775053687244855376938146308480126611426231538223327436987980372562551310387533467937926696668581055645572172758350753, 65537], [41955856476809306256895873474797127595828910120600482151687801777399607872173779439359647016219722023222636766416972731116222205896739617380159520158157386032856457428825641713866872028983076406550821166332433888873778559254476397060231376401169584741727272598569604538518481861169131729918620512038691647052112203022025686517462424263343166288982055502513601984676784079177011616092645611992858316157082480938640169674199619404202212944766021314200108375722479906237236134690263897071936627526084938408732394525665672215983505344352072692045739395864408889053410882882632396023247756671918523081061093704283891404896531087279268440830680474667307077544556412731798878124330491533865142251026112629847882150456525634409341959091507555676480228653282413061217625868256558697867280077751526952477393514507678425411662186512364117783893052750518014921345723750573410450492447076526758819080999733872142697960869096666341301311191483832204893387025093917528950604456698667603492961257223529793886173583852634928860017254948736653074421552596773686817653328191694233060047328170662992251255313036177420699742967527804455150703359758679042886461201909443857561703815213910361087949849285026203365291589698512537292552187162319236262450934011208321203209835203083543193284779616537911737881447003309590253528530511777002020897584014681063399446551603202367222380682479924198278667291779768433461115225154683137158664264284823185234351127080533778691225321385277142454184497938824967721811348373540865517317713793, 65537], [70778951862509421029126265463716155280871510258984323504412298760202381908638353518979410535196966213045587034299003435776765273764242271465606957968644062048829450891822118426786879627187605768792435250879384868443443738414903016384728144224076179527040592262542415975314201069131209006538696405422567122744749709113345259180543072184662286438112042282877517818826045176715993057302909496669251344564205472931269780643781372328593437856969387721337314900711630641296092285950692076438804841770049479742846163160302753989547082719419836475881542594855448225382703589748427927147453299960384849656239077108125178238482164639165765376449908279969572329801074264698111651222598520395899621678743988014746226204845353942447133291588717409114681537127709462953670138216661150996019509816516150000347433955012494320195627804209267047819223776413237071875948422453245291461798916338494218465263763061944264406005028233320209854134692015206364309629595087120007121393695151043205029348403320603325660953219575171370499635745822520810293737699609921256414835555541406675422016105586307791922676267501842773255789752793622164775086365999024291562685628087579906073930832824407121974451941036051267418420516550750514252615525730825062965472528221879856985145919179460208067586917230507140852255100023082583427836890365653670370210828651920302731800481458709801917126563699753608276525204546733463186973062810696793070002558957014861052042671032456829368478010351339273824420390316721554451359144870859188716697455733, 65537], [66146113793687684461157304141304716881602951681432110502091609361838782312745591688295238400659875201646023341279019920547635065197460671497510717339814598767641095267022409231744488078482659925200888714658334231430886390534591361570211600090093891088247516117037709559494222496499053845689678418946364007396818221272202239295437342291036993981184783062057719149146041697223323503660929133140984489028763574732128620608312017607684541203718338786393662447095956116718505119708964617237570730876347878011491266609840697201070157124205594694104818616391904833050127227237767247805250195312634715747887611593306033752222782708745067814254351829180711963552358636681684799308438693549434984057328438785048026684573466861094467873009741780011586758846198701102159874918660282811641206148278000619549020908969912097462280151828694371694720178678270376659339053389600761953704404978370708822228490451281399892489711967256750502293292616711373678497876842976639941856895428761280448229520612963541163564365525654101259168995490655163387353167844189109781610122702452409695844484128849054334292480954249861880553315766878262806043961455455186030434668504937159122898043074206580093306543333442243714493204380710461293809829398720416883525780943131643180111173199050309619160972963620273576159558575386670293723563676849415244484721354700690513502488222809850881976260807940912936490418551785196624332268492605255499394716544354227600181947590284105801237938174854232451333218127687792788895413429307277204283339299, 65537], [131248708608284444738851359628824428680968667256308520746148223691753150575171985977924542842341057354978107007938443889889343716051481509590810546113810657197100886159796154311921240499985442897604336289345009972927493520486971259726607864891119280452176255938506558617608530017892357707596871251511441061309515915029963307443676829338448249961921169908404770744779187286845353964779279941822434873185444738281179961622999957272105932026648499095167239384876035521212151947140358835373293489865412717022111892622278013807108896225404864253372921729481469034940721430754867614611428678587127021783062595775719154137286099611148808150863322200467970219333566392421153958941222455097412449392699372654392196019230957369091162269069956472725935982916691910965921867777363287632072425570091724165711915300248400683003638375969112076657423389185984485427485979589697356491313424180443689322669465508075617798327228229537489277117888739465355488192171676071861946281480380836481033339124233303031212293228348138682162852316472829406703319431376430011532393089387619125217277017798986480163594452654421557061532696242106707648304382971920777949194222134071418341417248106250345029963727041105699797735312153598217139933318391757574452572708330753995178637984325434577929414747258733704083890445743017886185406895292510800095754332148651304532902376643857819497807325356624468721186080540893401118088203531966823908842288115530905922614087247148077409429336688500498951767725166541355998369355539485149832162809061, 65537], [85289229698376647047043625005051971241080905387107866033348973997606302542630867338340263223432076416397769520366897117662559374341251919498171310810271324343586241512725642129912778917571392015055349798349645241438819025985404640909517692431633064373031275102318284575945813512720918597292460734113104224420744489900090323121500001463609709692238818476711498739488935489364240842749065385727996729495740534225221264641598325043699069622259102322217270102907952693267908000436627569941643713056919606420928880481570093363579680885313348930034062514559011177251852624604788916773700983432471464318857318993954699885677001666082162413749111302279551602532844912391486191438325860862771183400112149209526303003017325491793544526536840321418564867650515591562701025509858034584397625907168591982634749651052147101083815772759488399295950587561513289540910852619587806113924046232079497507125336384587287410924080601641661042508000480805412437781965169219201110073861042238030007794437693421271463722091709402757250612368988515940197069590963018329688128903699518817912275323064251207525670932883762229818615809217965878178862210759833756594587727550300776189777371815209818148273297407225196540197022511916081755644379220189061593885632766292970227655980514446208397246395174839319692916533467033867047084977636515810586123054562215572768016208392421967308665759269614008857471186963959117012191285125945205048625966050557570331670959722817703810711459793109437309208913530764965756914858076053404800286794437, 65537]]
1【服务端】私钥:[[95468039368294345616149383540232391378790055887795990728777150610338090538279189691255649687783085390091037473900676097068408183865512462305989509547819309931526854599849200796401234099777679874093116991773774271433177173377975785869129227690945510742845256503404572778947641982454553091352219487247847761139713817159606012970084125074020285939587846810354191121294213363658515082255106288415076510419765649670608743916541698800723863698352760575255255636001450547244910674888813034947154015572315232763399308332739554069280526016456447992961968775977572084293710223014957270308471253351667405577468871842218445273438136555963329796566819160443920388743133047828795360914234428116068631574933409456248402789981877594500124452711009153565311906131010194919162693896698771213422186883241221796212340933142277382965282461523786008904170462305011191991065904383730459663531451335220044451397991412577682421097462638028979243884402623804931684525711501995416939367648952571450955617704165088699815777326445972349382408107389096411402876692186449879604784993478990124474641088775406705130739426884866211509014592150384959705444179478789409989280956711182669860738043522891194886286353105160386760271558895845263652870060978033809404018633438704167096264816104314396069005262502592752646023070166809545456605340801419729808709817607001238237351174480231707053803969877830431707843415337581212785493022028291797365157983207698065305442218519550105857390824995148786281173961889459737643967970068720097675856314579, 85731426841970598632028314837317804138363537530928444121041879318098595334686438971870374766545583784168146672131414168191510548927125210859429034063472692485163342444190686398074398133485142646596612818970382184058726767853487479221750498760932238945155742267648340964026512864388022233018785929825863013051491177217362599467909135495694277864451585338507640112631465265291279554083338730672635272712123957154955771636178473221523743080079268476364459159644069289973674839391966576830566783320528379294510574077341364048390478624998265616823942938685140453132394338390516505629864941536928480407262699155134994883465136498895430802712162718000611053888637094524743173716914701587118531121039351003686272630709422800389334641735218604983128638960104108593427957486149743166117705490901150034638586439445271571021541788639326317378013834669665346060091659252290535589024924595704574192683798578891119568458047290856455433382324874636513720271670941647754278257047706692850577161320234339025850052333403939396020561194341581184849329346343919625946946437639101543456648841489712662371155019564401521297075793362320236402493625469185782017230918261973161700849811951367649668870458376219135385812796286200700781487844929730100928803011964022908354877405258500125779943317551979809050116718715826586694610561082410178547618857103142550560888469005621674987195632609443927469598484442964382630478911820356286614513929331474106144851276260553486640722754200034593566633002380575466957307903436052099285780133417], [63696070335349059315781390754663342996566124431288293327326731268432159846619356589799026883783792595574173295839374715226148249191085676984678476315177874992132213787088142513771711275837563899061695691854610010864636286367102970776600237942198427247862436536055746355544473439842647320627715171191215456607347233936243718446752167865311249018460140056825421241655608034336385352171203360369124514385920150427065345237092511393420170678062121768692414230500175059035770899595381014542505991072183392321338371417287617779862863105000436230610293586951510498652499969548866411322285780557398880673470212287742739998875950368303224377356562006121770204922740803405918995433443487399571396663089860204832121820698096349739568530699365168120589107903173116230629651789305699817594057741041892082898115616879300083248723569449468424270756143171972368852859105353903763744306595946808602728181627989294683549718787019843082885754055106678716926974186909539408528594332761013971368649102652326202631862955763740752802179348684217231724764349639659739542555548676471086185143135206794835780999666386193991621001719822311945432568528143689358762315107011606749122933899906099461502255114147563346013798594985503301754389914599333436348150326037293124496641879443198093631260738865173812938664795766496393834515022170067356229191473420226463520983129548737962062403692843059788053897923034216970305881319013052907073088844849965642585991987566630074459380504329430622146542362658723886809561318503281712209718227753, 34562094041462805717815921336444804313607396598883729786426993768965867163672901409735617971744746456066240086872209656349192942757285163484018970905656963434322804743620266962665911236096550190190777125868467989019291865350878873671157988029090716257400187766584958056510322718376556469915348264380896483702547797213890823072233300905722467100194715055018826079535454435037249179983218070678951384043787577541493671391370474658001048102332531428299600873564806525693441093741113329236096488220667922156020474327023894530871160945373155817274709709714858245610594800145371903703736891258398486284530482310212850406640945893880265530664764964824393400022240653522710612274115138859211719131729229576331462899825213303829726666161101740139711449504016649652850323774571662797850588441854674063448756469268283575815543104865570904843380629503169329692831199864785877978510623149775948381717122170434211439002549477840691299519033152763427544415412061126233070172428754910546354960467481800790856871438963551226535754157223453726165606346705745132072970324690848688861190574238930168052947305863622579472492891898680483496165891552831822839995547675935810475968123212368225128751387558248202161051615902067574349308234351113445569468958738626929471568321093090404399495274734205388147089506284110567521684725714211346591764267365447420992551527184603678674011727551677436263236295192164243894509231725873449899934636725858719159850317890990498398656259732521974601369651385264147189847709345998597556186175733], [57982321888849391521701081778595078450386335944324134668170630566320654798414630288120221512046397526219639090220840685595497974216271869369460654132203581970455585848620669167136293446713117293534879149542809297235053269788836874277903519427201981989380131480336201993764552446182258828980787123922147767760600604569888328112358752812710823537806280787867299680220418793749239501309499324473943079244598543026358031783464265867354930289539525164379364615798840605833312498222232793984957096762903608989434417265153637799365660771056399926103716937150100427785765338257998634104695373067465262471477647335348984503258859885809114858880355580737920776542629783067918656013892321273866068315118839398641882770399121317275266122237054497771679732114462457606155689268989110032535718261305772175787771014349017901407445697294529568244131425741190021338103131349662041224951966627398541662993630467459675565522569979397708942943051990306226553241433841308254911398413110577150557295207932648668404587875615006658647564348935632084588789009495788599801874635939788769936813370913442017913316987231868752071761581814334296139597787676149618837161338048393055158517463990448514460068625681378651067776397897806082237668980056419511366057602130945120038698081809127754423463136264619377554261567170669622972808693644589838256140385524556551161869308614519494767860185998258027233637982984491546247721917422165487381102871184505204626826362048946435360863829379511770254058353565624177384869094053343443224560617371, 16936319757056989210673723369816219643495210781424186489353958541451032162077166602155811227323560551206532967699124971304066675624793511990777504341864491350846564229368836990806568281282774682242675001292369171261586962228477108874405405685260654915890319314708880705046535964070173806600534170212882413266417098330429715505056435373815147092241415278730239678020957275565584200887555816842465971374633411800258965201807474274055501938334912037806341102586892987434076951240798363905183845817359106869169218147105239611109096298889675508268664316765557967088864395231287179038805308858057090185566879822704512112942068675619022624525789201246105519406679615137543171522558870655440715103778322819295994047236681254506620983230601557148530831619804916560801221097919064421243775810686687512602812894795655312776481687585534575735370114751183029726183801474389369123337434210631026747167439143055069343541171609132854982356033100679502566226662675395488357367721901744240946399670093709783242943002222647223552541053536849197443756232015503913964597242786802161300060515890625866382909917597560540343380947863634446543984181711402306827493004509851025898649555413975439016210750368395011162331285811735925593216793409479021176800607068694097967245239259867866410720702203336412873875282504664871111975563870284228968027683060576528709991941257290707030414672021561870723758998653871035199742136267241694060543272293272433534324180169082098820415324391888219740606950462586507054267614496197104698852285489], [78844760878078227689620813942925471194781624427971497229534702408186997425876470187382237838572978801934579182118369479293486789888670503631088250866120901315329895556023089744135862810157684389037650848008363459819104579985054401489755844768126625219157613289105120550722526143165607920599293883888425744971023650974803710418781638746245716361562293218983421904863973147604219238001597213703958451831470070111956234246266455895876860053260138213404490676444859071102672389633232448731715985825658011349723686785128481802094948557425032906195977295547616520154800534014471797245624832383004562746378327473408503035538854790628538495218795329355437598753230423002867359819218710343354471497473186377611334400715059557479495570781375227626719530500206823386571390572755482655873243618533375173685002075574476244162450633398730390577504083383046717933552648943930286864667430932297334388273111414568801400368027470144482935495102692091738158271924185122573077030310364902306175351166077881376461135708228957019076436681843639312775925006049691901999520845891393540900041213118996463109255282861783161342157052105729732543032076192253138510490341865513464260587698999384969615098123527331390726783950175609918942155900385412163685523564491181443471403432599537463046593045542231321154458597421790885489186505351878157162470884003070699800580140277104127195974648130572106228622851918517864138497760611141133367395280299130049125184577196099614024080843362676617185173800585367956665998135614244937788328533819, 43806922469039817276685882754836888820293624827131637527183836898077622370087735308804941123578404216165583285143906310168511443615303707046688381811618786023087835678799285393796163579447819730198635584914300908836123946335593419311937982750839904238906055704353033471374328157393369870649893772892095253850952655796657270053238564653051639072181634542057819885283303389287157408995714777035907031242493853288778283375944893091483652060963446797453312159564622325649047251532949221900117097088204909704098274362678844131707025982597887044163054782226457731485981229611806484170849093207842060870712331023532108900820548995089140061742252381522186692759836113841088380198929015666456602692181380526541671415127904293246576319008532831279609049301982560073317304318660514506446856387480464033143769679747624324089942557129447067428903512484673124323937451741763671450637169642868293858149924929490954076738983544923723642397626940343404274109717731313008104244921211268286080288347032692024969536532317438916225031366273559388613882367451106496337880550087141245245930878110757375740130403408120568120257025960596966871468316734787209632136360755579659865666149557853294307179623670674440971994857227638467401943880270273397157669688446819446272398361016706973074531380236569636245128647859701893258010543914446826054492700291314587385148354678069445208196939942147011251715930764047262993367244153244574357081909774773607829451468411713138405476235376016527015359198373305586471426758863648098945562265929], [100964715668909978360066366155786809370840818555033684845981568214756418362095692607025065484617742412595545609020148630685938178337091716386924795550454140480346051018369105320194586629675550096639914593669122094132145041261422371849772817104528185776441773631994315617329144560766321774120465881915607184711744511916889714171005858293682633466079338307349463464265517223604713396702772385827822666413490181045186527211334918194230505794658242860077510898912858252544603158644197063626858065366216800815863786343208764978159329622119297220024800281460524797106634114719753694576570409269635971123359090348779906105325992276902745880915840645351291981847541600941097187231722631991886396811711867811142757816817540301862280064828378828056284256834552312048054363733156614783065947273394597915665949154578145586439614824587267467959655949035110507322064105533555108574610697418423139061561863066919130373644611443090377940500914801655094596235115903277695080937313487824850468748516916301442279151818717315312431327616868299547487668691805137438235959968645798809976688281831882867701925567422895607934861394838828623865271301404857627900926328055120147120664601353476891452244805854488871369196664297988287883524558313038350906300777890797052375634133287807291780884839500024993304183783015118167817936337096240100767862353246167189823991403969435257351577069918753750464915564096997309786775053687244855376938146308480126611426231538223327436987980372562551310387533467937926696668581055645572172758350753, 95410939939376730393451488300657471015684477085468455527127126396940575583278307437604351062656911715471677535710146100609449978802398098467659893465229196152231436160789102807426204115981295582420666045365458741379556688517973211062455255945765591978677570297338479863472978331894652488133858629458128754193322262417211861666520207147784501210327381174767947438376672912893283337421549649802229479169328377748302363599987703947466067791854590487973517325960467175741830764623837107962503222672086590904803027538758338535901301587760994788143734547376492999899416573734284233524820461523827684569203277285817738756962469348507573704882430426291960495899750468124632360340495384966072727273798608378163377589928496970794127423820912729895811474346971844150171547448206871814218299587805173997409083825411222920473062383137904834272965068761894035680705076972046061722202652320242975185432651234076823599091279466343425896434242316972488797818961207524606820470839866864617335254735351231984351559466512175520384371500734948427555694063255545769000295578499197202363972906702695266815343462334283116486311567191007889594181057734236195435355523187996976380532811316358571165918303919804109189915602208405277560162478388314217255153697367229124346362470442701564239434531739689171083986332279379963021497588449119989590148597756757710898071386767311670797806770035147319805794320440615982933693473048680743986811874674856497511580662864565729945294645541973441801511711308923553808457880977535796882558592433], [41955856476809306256895873474797127595828910120600482151687801777399607872173779439359647016219722023222636766416972731116222205896739617380159520158157386032856457428825641713866872028983076406550821166332433888873778559254476397060231376401169584741727272598569604538518481861169131729918620512038691647052112203022025686517462424263343166288982055502513601984676784079177011616092645611992858316157082480938640169674199619404202212944766021314200108375722479906237236134690263897071936627526084938408732394525665672215983505344352072692045739395864408889053410882882632396023247756671918523081061093704283891404896531087279268440830680474667307077544556412731798878124330491533865142251026112629847882150456525634409341959091507555676480228653282413061217625868256558697867280077751526952477393514507678425411662186512364117783893052750518014921345723750573410450492447076526758819080999733872142697960869096666341301311191483832204893387025093917528950604456698667603492961257223529793886173583852634928860017254948736653074421552596773686817653328191694233060047328170662992251255313036177420699742967527804455150703359758679042886461201909443857561703815213910361087949849285026203365291589698512537292552187162319236262450934011208321203209835203083543193284779616537911737881447003309590253528530511777002020897584014681063399446551603202367222380682479924198278667291779768433461115225154683137158664264284823185234351127080533778691225321385277142454184497938824967721811348373540865517317713793, 18341963225613980401396519079701733413920290887061116836718299719612984499529288107742088387654473895468998672423404881505270037095800643568655117140720009570584103053134618013397008567715857029221471492997704553917979606957901692969966418439506077062349941059578829357967148691645281187632915700908197726165220665101912781244362969277950547894252481380022234927796123421159048473574780496959082405606246397628408067219059360293418948122136980280958043625323477910090529815142755251461129687279702451597549351290947818402736521531669610063014823373528101363813865071722390417298046469573021920515059911129918027566743831914516049256118525814115583793562858931308707595055315209926251891155136017104197196568239771670223874398735535391880721348721259661029082918377848323854672590875397665228914154680580956931512316532533023341833074094037585130772156336295219749503891848376253397992853154878348731053190172737290429734314775175577437840699974982917838771438075033371025006817062443961172200051712709681136747871145088701672035030773719966990249755901738001328359894231570573553315771477530176034530505188109186408242088999611329791220004782827423396270613232122814515382389914906276647217946848731198939482632983877480217092537524629179234610976367666329536809373646549673295753181699963217974064617110165894907718563276653312032460951709918380899833000966524657859024213833497218671361591024878853849929355703749678477769667796088975757946330342291238339676106823530945391122545046000018391689634274577], [70778951862509421029126265463716155280871510258984323504412298760202381908638353518979410535196966213045587034299003435776765273764242271465606957968644062048829450891822118426786879627187605768792435250879384868443443738414903016384728144224076179527040592262542415975314201069131209006538696405422567122744749709113345259180543072184662286438112042282877517818826045176715993057302909496669251344564205472931269780643781372328593437856969387721337314900711630641296092285950692076438804841770049479742846163160302753989547082719419836475881542594855448225382703589748427927147453299960384849656239077108125178238482164639165765376449908279969572329801074264698111651222598520395899621678743988014746226204845353942447133291588717409114681537127709462953670138216661150996019509816516150000347433955012494320195627804209267047819223776413237071875948422453245291461798916338494218465263763061944264406005028233320209854134692015206364309629595087120007121393695151043205029348403320603325660953219575171370499635745822520810293737699609921256414835555541406675422016105586307791922676267501842773255789752793622164775086365999024291562685628087579906073930832824407121974451941036051267418420516550750514252615525730825062965472528221879856985145919179460208067586917230507140852255100023082583427836890365653670370210828651920302731800481458709801917126563699753608276525204546733463186973062810696793070002558957014861052042671032456829368478010351339273824420390316721554451359144870859188716697455733, 44259929585262692717329945088026847059228775095498657946775482975885591580020705920545862681438608257061419470522632387887809854729483753745266099325128873016542236544984574474977186946021368991816097493805620499542994206138815560942352088233991332977969353984825568632990930134353650724109569496422290398161730512212690776381845616739732209634354757111812967258970184528314918709650851228962254277780952266531414287354371548907798896352508040459524327315271740344257388254922124337040375666042390829284546461672574690083458482139970760615447417163165326139015120596229154116153576317789592015328928542015124068153401529994389297597657356014613317869598968910933640717310901209436879294072635093410139765969253586451460524841782333900855057124289604180671501752102400663544510635428986492352588592881842979828715789612528186388979042190303655064945436956566316841536035807950379386999275826558954550560748447376332637748152015201321725260804027684134174778266896668718241646048892564851982866724330425498315816983021645211793663612333372722076191187039439465714047206638545527720391895687054956122522367597471436715147087741265308543922817453376862706199894608350880463854311618838707459808276234783883176398424546347537417325051644152617493499422282161527612271010402649039883912870276800273804512461570501496779516773802747557198973101956430640327364383623642419094826400225234091193384161364761372280623284870055070062104934027788609272751267608893023474829271096999125634316322525306169780019487206081], [66146113793687684461157304141304716881602951681432110502091609361838782312745591688295238400659875201646023341279019920547635065197460671497510717339814598767641095267022409231744488078482659925200888714658334231430886390534591361570211600090093891088247516117037709559494222496499053845689678418946364007396818221272202239295437342291036993981184783062057719149146041697223323503660929133140984489028763574732128620608312017607684541203718338786393662447095956116718505119708964617237570730876347878011491266609840697201070157124205594694104818616391904833050127227237767247805250195312634715747887611593306033752222782708745067814254351829180711963552358636681684799308438693549434984057328438785048026684573466861094467873009741780011586758846198701102159874918660282811641206148278000619549020908969912097462280151828694371694720178678270376659339053389600761953704404978370708822228490451281399892489711967256750502293292616711373678497876842976639941856895428761280448229520612963541163564365525654101259168995490655163387353167844189109781610122702452409695844484128849054334292480954249861880553315766878262806043961455455186030434668504937159122898043074206580093306543333442243714493204380710461293809829398720416883525780943131643180111173199050309619160972963620273576159558575386670293723563676849415244484721354700690513502488222809850881976260807940912936490418551785196624332268492605255499394716544354227600181947590284105801237938174854232451333218127687792788895413429307277204283339299, 34536028835503687793031121856465276137978390842352319409807752706767161346682464201749949915220098717517183067456330067615224631291128816657793639103617436572182782212291877856658572914071740502624838031008115732046051398619293638863687695986737762870708966026714624497715386810278234043239840336596223257169298654126557764685769488663117076766531591418854861129521938062401203650583177030956836706678459984439079865419155906106470385139826878199991124732818551755525486491389617334828191636314248007839803594318560949949283895150465645959425647854123597350768409500917373692500420391278327276247939611112802628483658989253823622235808099407829250682344852645528081701370770026334354124913768779748032002946316353953536635819134951923774913037127107239212660805811971311721429925079206248517487714689590677433439997470264966084282212825416356200311501788462060754552613457000593073926507652242846432438576531663727307485709347424890359124300288783301011159726068574340206469861684297337567965661885337597759036339201519573752169148993022832323335040070511071269980817746718010210747920566572794998107681392459475285919116318778753562359894309465368014276092882278483030463706228408440877752392678769476360731236563417126071168466586867897458339346353123744920697838377120569349466870725488062287598914288977789553859593705394858380131361764660506095503759454970801177322511661480701532452932640350002454328420336875095211850548870618663800053226081527738300446295218731822219420159173293531445762424792577], [131248708608284444738851359628824428680968667256308520746148223691753150575171985977924542842341057354978107007938443889889343716051481509590810546113810657197100886159796154311921240499985442897604336289345009972927493520486971259726607864891119280452176255938506558617608530017892357707596871251511441061309515915029963307443676829338448249961921169908404770744779187286845353964779279941822434873185444738281179961622999957272105932026648499095167239384876035521212151947140358835373293489865412717022111892622278013807108896225404864253372921729481469034940721430754867614611428678587127021783062595775719154137286099611148808150863322200467970219333566392421153958941222455097412449392699372654392196019230957369091162269069956472725935982916691910965921867777363287632072425570091724165711915300248400683003638375969112076657423389185984485427485979589697356491313424180443689322669465508075617798327228229537489277117888739465355488192171676071861946281480380836481033339124233303031212293228348138682162852316472829406703319431376430011532393089387619125217277017798986480163594452654421557061532696242106707648304382971920777949194222134071418341417248106250345029963727041105699797735312153598217139933318391757574452572708330753995178637984325434577929414747258733704083890445743017886185406895292510800095754332148651304532902376643857819497807325356624468721186080540893401118088203531966823908842288115530905922614087247148077409429336688500498951767725166541355998369355539485149832162809061, 55063296201913130111154281291400699857839594522364508261216494658051983994756454437387053198195940796422220305831324515197636533146703146408888657787192334400938231303898488835410142477487522353321501232518135544892830528492138407101073946704629821566940600836615008761327899245341568505887910265350978408848515191170618751822083623337361103387445604263722617324987468978619909474977589788980390418210076797519585013730020962589019219693801981821286040662330692534838764633514261656447330584308856411714344057366823839809976945873590593750804713107894670050745306250493691884946537551577781367226533196070210692326543499226521453226543586735765549860087834474565812107680988012922522472741386838749599667814345410575143224538628232192770490102541990693380540258245024442441535598852268350232119502112758303466493220439662968800390805028343292876732479955531105132108276882578110063479430971896452602713678627277276962626638300372620790786356327351088861448546130484380987898615336845138640981241018676050813219869513447078081262076293291968866424736220605455595624641573007162435569690410933455094420805553114277155224427082437045194419620594485363034397779226829250151288390555809382689403523021102668972463968114821530094661057970398895427189582621273738641381390456750925030496603778019084266598334248745076957992601655409140972231255679107274503114400276536996881507080979898166187267800516518400554203075286679370748825325523368504723150249007324400931040036194164381412574488215742909185851746733973], [85289229698376647047043625005051971241080905387107866033348973997606302542630867338340263223432076416397769520366897117662559374341251919498171310810271324343586241512725642129912778917571392015055349798349645241438819025985404640909517692431633064373031275102318284575945813512720918597292460734113104224420744489900090323121500001463609709692238818476711498739488935489364240842749065385727996729495740534225221264641598325043699069622259102322217270102907952693267908000436627569941643713056919606420928880481570093363579680885313348930034062514559011177251852624604788916773700983432471464318857318993954699885677001666082162413749111302279551602532844912391486191438325860862771183400112149209526303003017325491793544526536840321418564867650515591562701025509858034584397625907168591982634749651052147101083815772759488399295950587561513289540910852619587806113924046232079497507125336384587287410924080601641661042508000480805412437781965169219201110073861042238030007794437693421271463722091709402757250612368988515940197069590963018329688128903699518817912275323064251207525670932883762229818615809217965878178862210759833756594587727550300776189777371815209818148273297407225196540197022511916081755644379220189061593885632766292970227655980514446208397246395174839319692916533467033867047084977636515810586123054562215572768016208392421967308665759269614008857471186963959117012191285125945205048625966050557570331670959722817703810711459793109437309208913530764965756914858076053404800286794437, 68044504081806023582124951966280839347409192045261789270483611615405696549185918330904054242647200016903028474631179069748456283424732561192629890855941627853407239021230342011453370744528095623833621001213200956617942407993543602157484200779412643297806021789215463438025890799489234322261220408987865899843798867798588928921536675107592616094242929381469054474463562277749953411110939358807605428970112906793108000717924378949827571513335053847741767011011264087770356252358660132779480036939348742562593457815575535981325467976402547601442864223816049840758508420130399519392552750656121015355841338189387909703259345241814119412931413301661483361918188642893346460862479301174464105699959775906271148798629230521139467310290450173881793226268746787151956828574878998139643374922157597421070804597871362139333066298493801148873669189612993882555874277659282032068053085551110651183925888937008596088849752493915634858095141174160842869914572646629954024069595594439229425041070302686561382123519909365003195963967850288817897118146075059726059162880426935262307702295852571207082863177577356202604013767247665223009545148676587589085786582967647027018476419334669957981601826284593333101334018546963773414074523427520096757248319965448643838311059215518613159872776947607490095765821932691780214363348711380367260799995039803687745806405631331603882016955333471975066358549890993040836798481331829007911435670464549204501304850876358263758271832831541805942467270776286483956361450940664896731850973673]]
2【客户端】选择6号女嘉宾,公钥:[41955856476809306256895873474797127595828910120600482151687801777399607872173779439359647016219722023222636766416972731116222205896739617380159520158157386032856457428825641713866872028983076406550821166332433888873778559254476397060231376401169584741727272598569604538518481861169131729918620512038691647052112203022025686517462424263343166288982055502513601984676784079177011616092645611992858316157082480938640169674199619404202212944766021314200108375722479906237236134690263897071936627526084938408732394525665672215983505344352072692045739395864408889053410882882632396023247756671918523081061093704283891404896531087279268440830680474667307077544556412731798878124330491533865142251026112629847882150456525634409341959091507555676480228653282413061217625868256558697867280077751526952477393514507678425411662186512364117783893052750518014921345723750573410450492447076526758819080999733872142697960869096666341301311191483832204893387025093917528950604456698667603492961257223529793886173583852634928860017254948736653074421552596773686817653328191694233060047328170662992251255313036177420699742967527804455150703359758679042886461201909443857561703815213910361087949849285026203365291589698512537292552187162319236262450934011208321203209835203083543193284779616537911737881447003309590253528530511777002020897584014681063399446551603202367222380682479924198278667291779768433461115225154683137158664264284823185234351127080533778691225321385277142454184497938824967721811348373540865517317713793, 65537]
2【客户端】aesKey是:29552253920430244480935420141729228591524107699469182582408239360121179899450577101476579710345554967100561598716023732513996495299410141662749947786005937244656977738527833097623686415626468060988878281679146322528426363279034015388479917760840595285028058423329215856830057760069403267618402231064409756303753621261963998813245801555345709331865159424057596639080245793103551936729636763453083968195850372838520989535777891088951977529791342466901072485266582229616711047022114660121787354697672738075015287123936759958670135509278509350942132843134489493757755637523878155960314647723130468403810490573692371076668554081340711245013791760785972574183759777397663251563223522608282216156466237180692442271370955990451855629775212854995231450914759478136490035502825158538196415358501643051890005641780888343155829469962364157099845810220506084696098509487269528261738091603323397419416656531789855253870506832308483358363624293730162838161876883346182295801408785755959876699692983735536512143262257444692944221679236546240285743514676999000313320454652069198094628016190512249847885741233538694420190674827537926410498871218493798919040337011039226994754553313541467307192132768688698365695235674392298409676883545188918324372058782178620981923190334246098709749931778763297900223981313803899058107970787765589467633684966955996721171175415015860487524541409512786880456374877432683366318130671454224149144855682834737499745953873548378153316742130648196857516669493425502266531024732408366848110881647,6号公钥加密后的aesKey:4606472612974602508622632427307380010173803636358058244856522976096232512602379686490207895640537792004983080134271886727379723025711303668281827017339966885634024560566042799266950491775251686811694664740770543874547079228831903277536933935315439772787741486132400572730917506522683270723935357209330293923050282143747929261418785415533426247772179698891634657099125420226270255978456035756689380515028021333241088806940256999930367467160925676986823455783392288924812765694185140239109812548027321462443692483543630410591655167192180449458597231577138385956952983536854550941279898932098150613298394590306027063288547597131465958066466415591048654275613735219308187821407871968410106547263124649691150355377650906359293771949208304532678139833406911605485524737360213346514935655991684639161201201253299568018849412684636503284279841011346698650717706289716112948822045920064912376680509836734590518721165744929148203065858511286087610595754989961958260757565205384488670188377439878706774973355154996345362934837133843026337054579159085548540982032807844815262342932800216657735795504434502972885882118816281866429244555532765757003419922007505300329602810034031253578300194512540425146309151590561253274497579324977046693457859768782234498862957023503304684138903676717795781140871289338033645512358640317089722470881319813933197485715261416983236926142040082377937413824448781460578593268617368456910992443584025708836403167073758531083202905661916209769275985819629735361372587734176369872480335348
3【服务端】用所有的私钥去尝试解密客户端传来的加密的对称密钥
3【服务端】解密后的10个对称密钥:[74570323374396389264870423770034091402544799820708948593731334079366122211337626932219416082057199064256011860795146315081682027402745855432631099250989396563711358029449157027322791733719456880009807666975006780810864796388679431137466377785790767362305592675281879104474516542193129600442685082557005039068147590168390101822381045327539629863880076729396768239813025623325156006377547887957191848709726373987326739450680161725205534057234618135424302003642166731222844663535835491800965118151899502256495981649413093062625950956458930103372954616138492026586428627346695847658451113358794491097631554080498921660876535758324279734093954689598731386155998907457262416572290046317905075648586092701721251061709481640466764963365119395231608556006370493257733792466402329697329837157554963187045913739635293914642992220913490209914502478826953932306522317612602602200764189656293460006468357000271112482343662478139799341839677793587830056563945538444435879365135722754769535795284443896196934364403544137687199240088514907928842132190338264419190886798853144720263016757057259095888319547214340619345736017179784177772496784083017853820812227721025166104808890880583752890484317683514372415146607273701843871282799668842223648382646979415964498200553241010976288604280026906224092813045675528865332736191700956388137004435272136514987855897861752366337150388725090606399133292261131576137928060758288634779568647532085242099249670348092274748138393122616536725246788154426460478282491048110444784885166274, 42219172083289228269901652172468791732265998580474040773697029155661016845312126499208421066270776597596287448211238434224572531656161913669279679273527583037053417739648049174188418074916562383206002148246473903185519329772587909590393803361412982673452835569358939367874734387258088361390895418948083350290684336651028760472951914799362514674579349226595557378075865862111397398759967858114856488878482866428233457206492677764076026734002476067414145783217799295317339374638690586036680488133086075230644688956102410002096646771914689193273599491843137590800446080701046979806939106472028648024929722488553168396318440975873603585185601553692372601847494715224956427712804866427062699112887616187711016520289379703734962539734534455014816219642525094843752352096987259657015467688424333633394189606300575777181678426315819502364608168540616415818703452040242965383060221757078040487050484541506383243657436605328714292346709906049561526264846958520867625047500064938544812927319213918603671676715651065790205957476650946760832919741846205720793725962721370312875173717698513067647277386779880619885086755135356680626433368559766620619302941492110508587385728970940158529947791031985179131367131533042273779109408588636875470051322655839911704794503099677774669931447441842832551325850006219459237671147487494333701624187391136406182343881819779449302213756320906806111051846859535857054283384085729878910942047603129078162922280792144502898713025123260683007904440631227509080829720335772076263626931240, 21386976459483210944280259175571536561668566599857350886600852688770313873702644936431956050440440677158898092982993039131974745574799726763719967559586532806295026477917656296651602817590005082146633930752565742665071075933955844090873192111746962947260975301574881337068165696677494501348851505670545701279470569421187007354214392809664617324530250952267331556329578418948224749866327495415788321104376011521547570667801541254388200990168688120440619065431786633321600256318587383168950210926431697554150082369579080642229550068558107517161215437579496666286800656406524020239675991023712500390614130388931005281326181834811290776760938584219166760338251267766718991313784380593229828738305929742151069419093124606885157357504842989567938299409237772314181199524974448869926309383722944821016718362155840232322854001910702305912133956305078152261709581529066914977857919517851447546429952921947856691107232038044434650950551134932617718211488624330104087716701478037529445257827242113557843681174073803106678764266912317934235972284659938518870130992330695653033729947238879250219330331703807463036959441692949601122494620985978444143710218361065220474934402828261108371197363503353970545970382176060041821751446023226535366611982419148115592116808575891381288190935714224569297858187570678821168331784423866347935944090726719135697073442931362594332343105898557279341335995107558263446803991252860256778729657707195392745470771023462266974279410059969345228032406694150404930697253708319757093172238658, 3964117962088510714774204961688125545189197709075680843097519076757573526998254453844965701178421768044159673858158132734402395981551354791856560684430127147332278332889928658592281731865538441000321801951347218210793138592634420181370177462242241400840102322463283540805332458870802632091958319969698147354139983168865110726143192326700075500863553521846977615375472059839941510581498061330261855792482341278512087847162581247393254816145026241509682344969160977921562214146885535852168441510153162972547660786457077281363277592106029759957903148363151700974912629571637780103615287742570355171194122046378073693522210556182550929282939117735452828134775001072544341197740478895597907092371870265683565429858460942081345186719597486473523691661722097742138817570326148995871114287661346843317777112853605534953236591516882674497998874115520355704300139650412744681562944890150709596457996124490894738445921086167935394106029819136302057673965061761568218272841656832794727291590271763292883315197165935851648203957292508874449617858737810203591260097165128098350934148007334826546096239336212869333515288429897077523422552427607894055111767535825250341745109840583441520130326818318993278789910064567942881969097045907419337347946940473839783468958809398601113591309069711458657977834386770661923216224263316860310076659607532222982229351707708024858437646102038788406172731696236881472958638311859267077549227395250934004762110919324308390626278633207658053127749252774162066947376592915284202112096395, 6171945827047648849693338878265724251396852941151491311759067900102683690389815383370708350924357002769796927702986323975074793595290731000076280899525495664751289545742358924876950694965163282765364672254570315697722519459646865312152766930223861519948934065887101177275310875587146659248384563945098176312493395939102542216536089550480586209869488799363123661956151137085667073783873223106249847058294042790602577475382396939281961121751058052506903373279460094897434035602458255120814086273851647816537840391383658642776009868972865259557184389143347543901799975332101660410619276383161453109683044214186183451426594168242518288256321366566069241773933039612147971960783234485305468890414898304724754106245770068340497308822843511921897186442015957840143089985364085880401935083161427113478266770608494876587648382725931628367801902881480445537714709483615173712975181527194465897659304695880992457947051670594678493927638981210542740552367079533550017040831106235476152808048981110389140436835040352186615646752943390115363261363212841757975826941935029559911306492752755831219330049773660480939486928179910289919057356975815616941133147784730165076001613946361579210238688860644837872242580684804965949441432130726332406155563236250145665110689686300794310539770591076048963795303153936112470706971622648570093594260661436632535169075356534544522730031056552335586386581596825184282762460500723639087920394120626078021875782055818824865005306066632046648023767110161432380782515612295342763160151934, 29552253920430244480935420141729228591524107699469182582408239360121179899450577101476579710345554967100561598716023732513996495299410141662749947786005937244656977738527833097623686415626468060988878281679146322528426363279034015388479917760840595285028058423329215856830057760069403267618402231064409756303753621261963998813245801555345709331865159424057596639080245793103551936729636763453083968195850372838520989535777891088951977529791342466901072485266582229616711047022114660121787354697672738075015287123936759958670135509278509350942132843134489493757755637523878155960314647723130468403810490573692371076668554081340711245013791760785972574183759777397663251563223522608282216156466237180692442271370955990451855629775212854995231450914759478136490035502825158538196415358501643051890005641780888343155829469962364157099845810220506084696098509487269528261738091603323397419416656531789855253870506832308483358363624293730162838161876883346182295801408785755959876699692983735536512143262257444692944221679236546240285743514676999000313320454652069198094628016190512249847885741233538694420190674827537926410498871218493798919040337011039226994754553313541467307192132768688698365695235674392298409676883545188918324372058782178620981923190334246098709749931778763297900223981313803899058107970787765589467633684966955996721171175415015860487524541409512786880456374877432683366318130671454224149144855682834737499745953873548378153316742130648196857516669493425502266531024732408366848110881647, 54427513411236695567758200418728615433631634403187935530406827632808887851648783261404127233839218279058989427706800050102321076818043645112734420469545526965421952819629774353385481881651104510176016065459959141088866701433634463456459354620160308114320480114355249046566495839535724998778791406957195184336915096474397243274132637207998727563540962482322974584532131937159047758805218841895057386101059218075375360730028505598254222097916041966767689150039753426476521667384596217175242609066416156320899827796399726988191517180224369850193575164820592428406392384689006950024143483948861289252438092773946635202190509709684201774725055326827862619945247556696910060573802889343952388633071431436522082911356260468683919243694895446041842437844690328052796768270457987387208848146820506506203356952596305297243912777048705360724736295849509664337555326689636433715464615174651391443126371064792442873563933441705018434047478473735904238593690721960153892972713445366291986187508423744610514500259718256686870830197834676726985980033181706280622919591264629096049414162376817904588734593241212682328559924313859173949089794323333628321572416383135440067705141723543847805086359453234388462516530012332163538977139159895152166415692681612301983582286663468227082014819332070917213390169309627638962137365329076345792075553969888957393341117813607332708741080026691681233206710907141210508677484766949797953886960384624391946927252277858111302730727456067722040899833177299526239843221718793120862134233217, 19482251580110797225798349668612825884080721716525193274765263966766212528605712484027561697853788699064150652849223882477205560453056669732857358589287567519294788140901045241756194481519093989605263434724259250343874363872683032758491653403330935725344309767366518520740607066727963261846174764331464743651849961778124442191201094101196975554646150918176374133571614406877380678776808186966476671268628894467196121617680647825666425896967511326332286378893633192600743772357865656552680756846490380462067205214024380604724775897558494828996233986976320275480263687194453376466215566586090225274377771035619326781538140545238346361469462895447304758544123482827432743053503313724388566193282752709775496983778484968194355948257250252971287739784301108485783402368806669261142482213813309188669368567552593538583875216932069632483379666594837762869538127998775002651539947224339668077864315265165778988493230489617052722462787534036769802077357823698099623163919873281601368360041467423370955607273393195819774178789695385409311925093197159065531230384663231095498706163690844580895177399446227297522061482521403681944026061430573443834907412240835924817208004011936299795191753826223038082315275223176233295754590777998195169131447608136052249631968176009157176710355703434803188482248197674736947031003564884751822974360013788955361185443677876841967318038796962411040946077614534091796151974861721317420659192600442279719313450744743407965614780408329335600046042768734206814232491276210992132520834878, 109105687955456233371171125101821673027868948981077536949743757965180269274494224217334670694291414323450393564554274356762852602124648386894981730092332580043464943140345518896468096989736323206936970634172276997562278643271897280020855634587142650249891709210323361003285500543925692867867964284297490450389381705657290748659634588866907483250981123028535146746061556094080018011139337237076205291589851416242921836224980915545719010808891567161230082318652077269288793348751073178023636304840561058428064681555295839777018155380631717946279487094074736550718751111383211550529711979720181151043723533137269959444322247118842877601141075197185320027772965230533974482697423731951254592655248098373576903728808580885823273069893584211155792060047054659279038749033160497448300872735017392862459412137606597017932936708669567738138655756026581214130192266012994595830243560660482385000406400469387156875227043846030656868087177016731002088446679462535065922851485885985794414835090396674647328906663008960684286021133716919887838031294231636116067242003455153443352457973216900688194283374625375462714340862708935916352565417456998490632870806412872821369917062375353161667922634857222344340175510370495026352810067055595585522931023600464243498419898989100678183647806018656884585399207037200524146509478489384224754170191363309597921029675243819020922360471034114318887868383450312966646990161528435733543053183719598349628026076982138883036665874903801130981572192038363104790271541268273511252414098411, 18432166250648519577488805890487134110117747351018489633206827679055044530656113500344578445895693304267423961349568959455326230500514258368972518491193148162129469095613095062808189498277146520299099483132633447859068395648178274106290686309847838563519155713874805523717858939154712765353453419138352499333326708293980527646332315995746951098627050055757024623999644254158069887628257419410811236964985204034727962735870535031101685289026697228438839186595115913336395774434341822045499147352769910703318759752423875261847629689952619867146829934506979149658615477977242400004215163955066012080883237128638547359367609384374667501357107008660726697779935469121019235539265074987761951627989958342969000147412602941401014552828012365304769129385169662437040684929503851562813999623830439218462961855415302335395781758461333076991505153713289578980339735868790113097315971124860902106796718015897269033434349240321158202662481879124000845370994475894438667902151326401449049109065397969187683398373085912172292508894310645283064473153299548415014629756213273462022906860249616562092062171706759846541585124994914762081005638937112763539856578570928598672174596431797168813376817136018591457624122472685984451688720076276291655118739254048470411270675421509390134194569692139157904363615374809706503279578091001958577161788051178095529454742330224873545193097875041932087519308265168722974396763759462637388118783658296353471226604576376409590035983426379515725902884809290636605968654232917814387754181]
4【服务端】加密后女嘉宾数据:[IFH4yjIuztw6GqnsQXQEhw==, kwc0EQvFM1nlVYG5/Jd84A==, avwV5d1nTna2y+0Re+VlIQ==, 3sroKP2+x65mjAswNldRRA==, eqdOvGrnmy701qeLjkTSXA==, RZhzh/5d7gDkY2i802Detw==, F09hmRkJXZ059KCFb95j7w==, 6awVVmcQk+yU95xYbZqrqg==, xjbN6ZF5rEY21/WzqkyAkA==, KMYm7evs5tZMJrvGmBMqBA==]
5【客户端】获得密文数组:[IFH4yjIuztw6GqnsQXQEhw==, kwc0EQvFM1nlVYG5/Jd84A==, avwV5d1nTna2y+0Re+VlIQ==, 3sroKP2+x65mjAswNldRRA==, eqdOvGrnmy701qeLjkTSXA==, RZhzh/5d7gDkY2i802Detw==, F09hmRkJXZ059KCFb95j7w==, 6awVVmcQk+yU95xYbZqrqg==, xjbN6ZF5rEY21/WzqkyAkA==, KMYm7evs5tZMJrvGmBMqBA==]
5【客户端】解密得到第6号女嘉宾的身高是164
之前存在问题
服务端用私钥去尝试解密客户端传来的加密的AES密钥,如果私钥不匹配那么解密会抛异常,所以实际上服务端也就知道客户端要查的是哪一个数据了。
应该找到一个RSA加解密算法(见下文),能够接收一个随机大整数、输出密文,然后对这段密文解密的话、无论用的是什么私钥,都能够返回随机的同样长度的整数集合。这样服务端就无法分辨10个私钥对1个密文解密出的10个结果,哪个才是真正的AES密钥了。
RSA算法实现
package com.wangan.rsa;
import java.math.BigInteger;
/**
* 求最大公约数
*
* @author 北门大官人
*
*/
public class GCD {
/**
* <p>
* 辗转相除法求最大公约数
*
* @param a
* @param b
* @return
*/
public BigInteger gcd(BigInteger a, BigInteger b) {
if (b.equals(BigInteger.ZERO)) {
return a;
} else {
return gcd(b, a.mod(b));
}
}
/**
* <p>
* 扩展欧几里得算法:
* <p>
* 求ax + by = 1中的x与y的整数解(a,b互质)
*
* @param a
* @param b
* @return
*/
public BigInteger[] extGcd(BigInteger a, BigInteger b) {
if (b.equals(BigInteger.ZERO)) {
BigInteger x1 = BigInteger.ONE;
BigInteger y1 = BigInteger.ZERO;
BigInteger x = x1;
BigInteger y = y1;
BigInteger r = a;
BigInteger[] result = { r, x, y };
return result;
} else {
BigInteger[] temp = extGcd(b, a.mod(b));
BigInteger r = temp[0];
BigInteger x1 = temp[1];
BigInteger y1 = temp[2];
BigInteger x = y1;
BigInteger y = x1.subtract(a.divide(b).multiply(y1));
BigInteger[] result = { r, x, y };
return result;
}
}
}
package com.wangan.rsa;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
/**
* 主要用于计算超大整数超大次幂然后对超大的整数取模。 我在网上查询到这个算法叫做"蒙哥马利算法"。
*
* @author 北门大官人
*/
public class Exponentiation {
/**
* 超大整数超大次幂然后对超大的整数取模 (base ^ exponent) mod n
*
* @param base
* @param exponent
* @param n
* @return
*/
public BigInteger expMode(BigInteger base, BigInteger exponent, BigInteger n) {
char[] binaryArray = new StringBuilder(exponent.toString(2)).reverse().toString().toCharArray();
int r = binaryArray.length;
List<BigInteger> baseArray = new ArrayList<BigInteger>();
BigInteger preBase = base;
baseArray.add(preBase);
for (int i = 0; i < r - 1; i++) {
BigInteger nextBase = preBase.multiply(preBase).mod(n);
baseArray.add(nextBase);
preBase = nextBase;
}
BigInteger a_w_b = this.multi(baseArray.toArray(new BigInteger[baseArray.size()]), binaryArray, n);
return a_w_b.mod(n);
}
private BigInteger multi(BigInteger[] array, char[] bin_array, BigInteger n) {
BigInteger result = BigInteger.ONE;
for (int index = 0; index < array.length; index++) {
BigInteger a = array[index];
if (bin_array[index] == '0') {
continue;
}
result = result.multiply(a);
result = result.mod(n);
}
return result;
}
}
package com.wangan.rsa;
import java.math.BigInteger;
import java.security.SecureRandom;
/**
* RSA加密、解密、测试正确性
*
* @author 北门大官人
*
*/
public class RSA {
/**
* <pre>
def gen_key(p, q):
n = p * q
fy = (p - 1) * (q - 1)
e = 3889
# generate d
a = e
b = fy
r, x, y = ext_gcd(a, b)
print x
d = x
# 公钥 私钥
return (n, e), (n, d)
* </pre>
*
* @param p
* @param q
* @return
*/
public BigInteger[][] genKey(BigInteger p, BigInteger q) {
BigInteger n = p.multiply(q);
BigInteger fy = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
BigInteger e = new BigInteger("65537");
// generate d
BigInteger a = e;
BigInteger b = fy;
BigInteger[] rxy = new GCD().extGcd(a, b);
BigInteger r = rxy[0];
BigInteger x = rxy[1];
BigInteger y = rxy[2];
BigInteger d = x;
// 对于计算出来的负数d,需要d=d+fy
if (d.compareTo(BigInteger.valueOf(0)) < 0) {
d = d.add(fy);
}
// 公钥 私钥
return new BigInteger[][] { { n, e }, { n, d } };
}
/**
* 加密
*
* @param m 被加密的信息转化成为大整数m
* @param pubkey 公钥
* @return
*/
public BigInteger encrypt(BigInteger m, BigInteger[] pubkey) {
BigInteger n = pubkey[0];
BigInteger e = pubkey[1];
BigInteger c = new Exponentiation().expMode(m, e, n);
return c;
}
/**
* 解密
*
* @param c
* @param selfkey 私钥
* @return
*/
public BigInteger decrypt(BigInteger c, BigInteger[] selfkey) {
BigInteger n = selfkey[0];
BigInteger d = selfkey[1];
BigInteger m = new Exponentiation().expMode(c, d, n);
return m;
}
public static void main(String[] args) {
// 公钥私钥中用到的两个大质数p,q'''
/*
BigInteger p = new BigInteger(
"106697219132480173106064317148705638676529121742557567770857687729397446898790451577487723991083173010242416863238099716044775658681981821407922722052778958942891831033512463262741053961681512908218003840408526915629689432111480588966800949428079015682624591636010678691927285321708935076221951173426894836169");
BigInteger q = new BigInteger(
"144819424465842307806353672547344125290716753535239658417883828941232509622838692761917211806963011168822281666033695157426515864265527046213326145174398018859056439431422867957079149967592078894410082695714160599647180947207504108618794637872261572262805565517756922288320779308895819726074229154002310375209");
*/
SecureRandom rnd=new SecureRandom();
BigInteger p = BigInteger.probablePrime(2500, rnd);
BigInteger q = BigInteger.probablePrime(2500, rnd);
System.out.println("p=" + p);
System.out.println("q=" + q);
RSA rsa = new RSA();
// 生成公钥私钥'''
// pubkey, selfkey = gen_key(p, q)
BigInteger[][] keys = rsa.genKey(p, q);
BigInteger[] pubkey = keys[0];
BigInteger[] selfkey = keys[1];
// 需要被加密的信息转化成数字,长度小于秘钥n的长度,如果信息长度大于n的长度,那么分段进行加密,分段解密即可。'''
BigInteger m = new BigInteger(
"29552253920430244480935420141729228591524107699469182582408239360121179899450577101476579710345554967100561598716023732513996495299410141662749947786005937244656977738527833097623686415626468060988878281679146322528426363279034015388479917760840595285028058423329215856830057760069403267618402231064409756303753621261963998813245801555345709331865159424057596639080245793103551936729636763453083968195850372838520989535777891088951977529791342466901072485266582229616711047022114660121787354697672738075015287123936759958670135509278509350942132843134489493757755637523878155960314647723130468403810490573692371076668554081340711245013791760785972574183759777397663251563223522608282216156466237180692442271370955990451855629775212854995231450914759478136490035502825158538196415358501643051890005641780888343155829469962364157099845810220506084696098509487269528261738091603323397419416656531789855253870506832308483358363624293730162838161876883346182295801408785755959876699692983735536512143262257444692944221679236546240285743514676999000313320454652069198094628016190512249847885741233538694420190674827537926410498871218493798919040337011039226994754553313541467307192132768688698365695235674392298409676883545188918324372058782178620981923190334246098709749931778763297900223981313803899058107970787765589467633684966955996721171175415015860487524541409512786880456374877432683366318130671454224149144855682834737499745953873548378153316742130648196857516669493425502266531024732408366848110881647");
System.out.println("被加密信息:" + m);
// 信息加密'''
BigInteger c = rsa.encrypt(m, pubkey);
System.out.println("密文:" + c);
// 信息解密'''
BigInteger d = rsa.decrypt(c, selfkey);
System.out.println("被解密后信息:" + d);
System.out.println("再生成一对公私钥");
p = BigInteger.probablePrime(2500, rnd);
q = BigInteger.probablePrime(2500, rnd);
System.out.println("p=" + p);
System.out.println("q=" + q);
keys = rsa.genKey(p, q);
pubkey = keys[0];
selfkey = keys[1];
d = rsa.decrypt(c, selfkey);
System.out.println("用新私钥解密原来的加密信息,得到:" + d);
}
}
从原理入手去实现RSA大整数质因数分解算法。解决了密钥对不匹配时的报异常的问题,在OT协议场景下、服务端无法判断解密的整数哪个是真正的AES密钥。
参考:
网友评论