0xDEAD BEEF Ierakstīts Aprīlis 25, 2012 Share Ierakstīts Aprīlis 25, 2012 (labots) Šodienas konkurs ir par AES. Es izvēlējos random stringu 16 simbolus (tas arī ir atbilde) (a-z lowercase) garu, un nokriptēju izmantojot AES-128 ar programmu, ko fiksi uzrakstīju C# Visual Studio 2010. Programas output es saglabāju failā. Lūk faila saturs: plain - ******************************** key - ******************************** encrypted - 2a842138e8c02d1cd561c21d67f958ce 5e9078c024f1b1c3d002d8f1ced09de0 <-- slikts Kā redzat - ir notikusi liela nelaime. Manam datoram uzbruka nelāga sērga - "bit rotting". Interesantie baiti pārvērtās par zvaigznītēm. pamāciet mani latviešu valodas gramatikas lietošanā man uzzināt, kādu stringu es enkriptēju šorīt .. Zemāk pievienoju arī programmas kodu, bet šķiet, ka arī to ir piemeklējusi "bit rot" nelaime. Balvu fonds: * Pirmā vieta 10Ls whiteCryption darbinieki piedalīties nedrīkst. Balvu saņem pirmais dalībnieks, kurš iepostē pareizo atbildi (skat. zemāk atbildes formātu) (iepostēšanas laiks tiek uzskatīts pēdējais posta edit laiks). Konkursa beigu termiņš - 28. aprīlis (2012), 23:59 LV laiks. Atbilde ir jaiepostē šajā topikā šādā formā (lai citiem ari būtu interesanti): "niks <atstarpe> SHA1(niks + atbilde)". + ir stringu kontaktenācija. Lūdzu lietojiet nikam ANSII lowercase un sha1 160 bitu variantu. Piemēram: 0xdeadbeef 0f80010725b1a67fc11c43a787e04407698cf1bb (ja atbilde būtu bijusi "abcdefghijklmnop"). Kā vienmēr - uzvarētājs sūta man (PM) savu vārdu un uzvardu, kā arī p.k. (obligāts lauks DNB bankā) un bankas konta numuru, lai saņemtu balvu! ---- KONKURSS IR NOSLĒDZIES!!! APSVEICAM Vilx- AR UZVARU!!! STAY TUNED! RĪT 12:00 LV LAIKS NĀKAMAIS KONKURSS!!! ---- using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace KonkurssAES { class Program { static string ByteToHex(byte[] data) { string retVal = string.Empty; for (int i = 0; i < data.Length; i++) { retVal = retVal + string.Format("{0:x2}", data[i]); } return retVal; } static void Main(string[] args) { string plainText = "****************"; byte[] plain = Encoding.GetEncoding("ISO-8859-1").GetBytes(plainText); byte[] encrypted = null; byte[] key = new byte[16]; Random rand = new Random(); rand.NextBytes(key); // izmantojam random atslegu using (RijndaelManaged rijAlg = new RijndaelManaged()) { rijAlg.Key = key; rijAlg.IV = new byte[16]; // init vektors visas nules rijAlg.Padding = PaddingMode.None; ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { csEncrypt.Write(plain, 0, plain.Length); } encrypted = msEncrypt.ToArray(); } } Console.WriteLine("plain - {0}", ByteToHex(plain)); Console.WriteLine("key - {0}", ByteToHex(key)); Console.WriteLine("encrypted - {0}", ByteToHex(encrypted)); } } } Veiksmi, Beefs Labots Aprīlis 25, 2012 - Vilx- Link to comment Share on other sites More sharing options...
kirils Aprīlis 25, 2012 Share Aprīlis 25, 2012 Konkursa uzdevumu ievieto Balvu fonds: * Pirm vieta 10Ls Ka vienmer - uzvaretajs suta man (PM) savu vardu un uzvardu, ka ari p.k. un bankas konta numuru, lai sanemtu balvu! --- KONKURSS IR NOSLEDZIES! APSVEICAM UZVARETAJU kirils! STAY TUNED! RIT (25. APR. 2012. 12:00 LV laiks!) NAKAMAIS KONKURSS!!! --- Veiksmi, Beefs šis man patīk. Link to comment Share on other sites More sharing options...
raiviss Aprīlis 25, 2012 Share Aprīlis 25, 2012 vēl viens desmitnieks tev pat bez piedalīšanās Link to comment Share on other sites More sharing options...
Uģis Lācis Aprīlis 25, 2012 Share Aprīlis 25, 2012 Oh boy, Kirils arī šodien ir šeit. Nu ok, ja uzdevums būs balstīts uz ne-pārcilvēcisku loģiku un var izlīdzēties ar skaitliksām manipulācijām, tad Kirils paņems šo ar. Jāatzīst, ka Tavs ātrums, Kiril, ir gana iespaidīgs. Žetons. Link to comment Share on other sites More sharing options...
atkarigais Aprīlis 25, 2012 Share Aprīlis 25, 2012 Man kaut kā vairāk patika pirmie 2 konkursi, bet nu ne es sponsorēju pasākumu un ne man to regulēt Link to comment Share on other sites More sharing options...
kirils Aprīlis 25, 2012 Share Aprīlis 25, 2012 jāsaka, ka man nebūs daudz laika. ja izskatīsies, ka pa 20 min nav atrisināms, tad došos tur, kur man jādodas. :--) Link to comment Share on other sites More sharing options...
Vilx- Aprīlis 25, 2012 Share Aprīlis 25, 2012 Draugs, Tev ir bugs programmā! Pusi dienas noņēmos nesaprasdams, kāpēc nesanāk. Līdz atkodu - swEncrypt.Write(plain); Šis ieraksta strīmā tekstu "System.Byte[]". Nevis Tavu ūberparoli. Link to comment Share on other sites More sharing options...
0xDEAD BEEF Aprīlis 25, 2012 Author Share Aprīlis 25, 2012 (labots) Nope, viss ir pareizi. Es to stringu konverteju uz ascii 8bit 16baiti augsha (kur pieskir plain) un ierakstu strima 16 baitu buferi, nebis stringu (kas viss drizak tiktu serializets ka 4 baiti garums + 16 * 2 unicode burti). Beefs edit: plainText bija mana uber parole, bet del bit rota parvertas par **** Labots Aprīlis 25, 2012 - 0xDEAD BEEF Link to comment Share on other sites More sharing options...
Vilx- Aprīlis 25, 2012 Share Aprīlis 25, 2012 (labots) Nope, viss ir nepareizi. Tu raksti čerez StreamWriter, kas paredzēts teksta ierakstīšanai. Write() metodei nav overloada, kurš ņemtu pretī baitu masīvu. P.S. Saprotu par to **** bitrotu, par to nav jautājums. Ja nu kas, tad StreamWriter pēc defaulta izmanto UTF-8, un nekādus terminatorus. Tātad, swEncrypt.Write(plainText); patiesībā darītu to, ko Tu īstenībā gribi. Ja netici, padebugo, un paskaties, kas tajā MemoryStream nonāk, ja izvāc CryptoStream no vidus ārā. Es to jau izdarīju, tāpēc esmu drošs par to, ko saku. Ā, un ja vien Tu neuzliksi rijAlg.Padding = PaddingMode.None; , tad viņš uzģenerēs divus output blokus, nevis vienu, pat pareizajā variantā. Neesmu īsti drošs, kāpēc tā. Labots Aprīlis 25, 2012 - Vilx- Link to comment Share on other sites More sharing options...
binary Aprīlis 25, 2012 Share Aprīlis 25, 2012 Ā, un ja vien Tu neuzliksi rijAlg.Padding = PaddingMode.None; , tad viņš uzģenerēs divus output blokus, nevis vienu, pat pareizajā variantā. Neesmu īsti drošs, kāpēc tā. Я тупой и ничего не знаю... Beeet... Defaultā paddings ir PKCS7: The PKCS #7 padding string consists of a sequence of bytes, each of which is equal to the total number of padding bytes added. The following example shows how these modes work. Given a blocklength of 8, a data length of 9, the number of padding octets equal to 7, and the data equal to FF FF FF FF FF FF FF FF FF: Data: FF FF FF FF FF FF FF FF FF PKCS7 padding: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07 Attiecīgi ja ir viens pilns bloks datu, tad paddingu tajā pašā blokā nav kur likt, tāpēc tiek pievienots vēl viens bloks, kam PKCS7 gadījumā visi baiti ir 0xA0 (pieņemot, ka bloka izmērs ir 128 biti). A vispār esmu saguris un nejūtos īsti vesels - neņem ļaunā, ja kaut ko samuldējos. Link to comment Share on other sites More sharing options...
Vilx- Aprīlis 25, 2012 Share Aprīlis 25, 2012 (labots) IMHO, ja ir precīzi piepildīti visi bloki, tad nevajadzētu būt vispār paddingam... bet go figure. Tagad arī lauž meklēt dokumentāciju. Un, pēdējais punkts uz "i" - ja galīgi man netici, tad es nupat atkodu atslēgu. Lūk, kods, ar kuru vari pārbaudīt, ka Tev tur ierakstījies ne tas: static void Main(string[] args) { byte[] encrypted = new byte[] { 0x5e, 0x90, 0x78, 0xc0, 0x24, 0xf1, 0xb1, 0xc3, 0xd0, 0x02, 0xd8, 0xf1, 0xce, 0xd0, 0x9d, 0xe0 }; byte[] key = new byte[] { 0x64, 0x11, 0xf7, 0x89, 0xcd, 0x96, 0x10, 0x6d, 0x96, 0xd6, 0x57, 0x8e, 0xf1, 0x82, 0x1b, 0x46 }; using (RijndaelManaged rijAlg = new RijndaelManaged()) { rijAlg.Key = key; rijAlg.IV = new byte[16]; // init vektors visas nules ICryptoTransform encryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV); using (MemoryStream msEncrypt = new MemoryStream(encrypted)) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Read)) { using (StreamReader srEncrypt = new StreamReader(csEncrypt)) { Console.WriteLine(srEncrypt.ReadToEnd()); } } } } } // Output: System.Byte[] He, ja tā padomā, es pat esmu izpildījis uzdevumu, jo jautāts bija - "kādu stringu esmu enkriptējis". Tu enkriptēji "System.Byte[]". Ak, jā pareizais formāts. SHA1 128-bitu versiju nevarēju nekur atrast, pat wikipēdija par tādu klusē, tāpēc izmantoju parasto SHA1 160-bitu. vilx- dff675897ffecd4553fbfbe91fd21f0a69a29ebb Labots Aprīlis 25, 2012 - Vilx- Link to comment Share on other sites More sharing options...
0xDEAD BEEF Aprīlis 25, 2012 Author Share Aprīlis 25, 2012 Lol! Paldies Vilx! Viss izkatījās ļoti skaisti, bet tas dranķis mani piečakarēja. Ar padding - tur ir 2vi bloki tādēļ, ka ja tu ieraksti pilnu bloku, tad viņš pievieno klāt vēl vienu ar 16mitniekiem (ar ideju, ka var zināt, ka tas bloks ir tukšš jo padding pasaka, cik baiti ir aizpildīti). Es izlabošu kodu. Rīt no rīta pārbaudīšu atslēgu. Tikmēr - es pamainiju tekstus - parisini ar tiem! Beefs Link to comment Share on other sites More sharing options...
binary Aprīlis 25, 2012 Share Aprīlis 25, 2012 (labots) Ai, sajaucu - nevis 0xA0, bet 0x10 būs pareizais... IMHO, ja ir precīzi piepildīti visi bloki, tad nevajadzētu būt vispār paddingam... bet go figure. Tagad arī lauž meklēt dokumentāciju. Un tagad iedomājies, ka tev ir šāds bloks ar datiem: 0x10 0x0F 0x0E 0x0D 0x0C 0x0B 0x0A 0x09 0x08 0x07 0x06 0x05 0x04 0x03 0x02 0x01 Pēc tavas loģikas, kas ir pēdējais baits? Paddings, kas nozīmē, ka reālo datu daudzums ir 15 baiti? Vai tomēr dati, kas nozīmē, ka ir "precīzi piepildīti visi bloki"? Grozies kā gribi, bet ja ir iespējams patvaļīgs datu daudzums (t.i., pēdējais bloks var nebūt pilns), tad paddingu vajag, un pilnu bloku gadījumā tam ir nepieciešams ekstra bloks Labots Aprīlis 25, 2012 - binary Link to comment Share on other sites More sharing options...
Vilx- Aprīlis 25, 2012 Share Aprīlis 25, 2012 Lūdzu: vilx- E2C1ADF6512A652DF3B7634F223CC8B9534C1F58 Link to comment Share on other sites More sharing options...
0xDEAD BEEF Aprīlis 25, 2012 Author Share Aprīlis 25, 2012 (labots) Tas pkcs-7 ir piepildīts ar brīvo skaitu lidz beigām. Tādēļ vienmēr var ņemt pēdējā bloka pēdējo baitu. Ja tas ir 16, tas nozīmē, ka viss bloks ir izmantots paddingam. Beefs Vilx, Tu man PM atsūtiji pareizi atbildi, bet tevis iepostēto hash gan es nekādi nevaru dabūt sakrist ar manis aprēķināto. Un starpcitu - vai tu esi uzinstalējis uz mana PC trojāni? Beefs Labots Aprīlis 25, 2012 - 0xDEAD BEEF Link to comment Share on other sites More sharing options...
kirils Aprīlis 25, 2012 Share Aprīlis 25, 2012 vilkam taisnība būtībā, bet ar sha1 viņam gan neiet. te ir propercase atbilde: kirils d90cf56068d2bbec2aa73ec12b0683b6fcd431be un te ir lowercase atbilde: kirils fb979976a3d6ebb8bd8bccb6e846391120706e54 Link to comment Share on other sites More sharing options...
0xDEAD BEEF Aprīlis 25, 2012 Author Share Aprīlis 25, 2012 (labots) Nez, Kiril! Man tavi sha ari nesakrit ar atbildi... :/ Beefs edit: vajadzētu sanākt "0xdeadbeef c6a82cd09c66fbfb7107d53217f1399381346570" Labots Aprīlis 25, 2012 - 0xDEAD BEEF Link to comment Share on other sites More sharing options...
Vilx- Aprīlis 25, 2012 Share Aprīlis 25, 2012 (labots) Es dikti steidzos, moš būšu nomudījies. Vai arī moš tas tāpēc, ka tur ir arī mīnusa zīme un atstarpe tajā stringā. Rekur, outputs no DAMN Hash Calculator: Calculating hash of 22 bytes string `vilx- ****************`... SHA-160 : E2C1ADF6512A652DF3B7634F223CC8B9534C1F58 Calculation took 0.000 seconds Labots Aprīlis 25, 2012 - Vilx- Link to comment Share on other sites More sharing options...
binary Aprīlis 25, 2012 Share Aprīlis 25, 2012 Rēķinot hashu, starp niku un atbildi *nav jāliek atstarpi*. Link to comment Share on other sites More sharing options...
0xDEAD BEEF Aprīlis 25, 2012 Author Share Aprīlis 25, 2012 (labots) Jā! Viss pareizi, vilx! Mums ir uzvarētājs!!! Vienīgi, Tu ieliki "- ", ko es galīgi negaidīju, es izmēģinājos ar "-" un ar " ' un ar "Vilx" un ar "vilx" (aizmirstam par kommatiem). Viss pareizi! Tu esi uzvarējis! Tagad, lūdzu, pasaki man, kā Tu to izdarīji 3 minūtēs, jo es reāli estimeitoju šito uz 30+ minūtes cpu laika. Beefs Labots Aprīlis 25, 2012 - 0xDEAD BEEF Link to comment Share on other sites More sharing options...
martinno Aprīlis 25, 2012 Share Aprīlis 25, 2012 Vilx - nestāsti viņam! Lai pats domā! 1 Link to comment Share on other sites More sharing options...
Vilx- Aprīlis 25, 2012 Share Aprīlis 25, 2012 (labots) Par vēlu. Jau pastāstīju, pirms izlasīju Tavu komentāru. Tā kā neviens cits tāpat droši vien šito nerisinās, tad iepostēšu savu softu un pareizo atbildi šeit. Atbilde: hrunxpiynnayqqqr using System; using System.Net; using System.Net.Sockets; using System.Threading; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.IO; namespace CSTest { public static class Program { static string ByteToHex(byte[] data) { string retVal = string.Empty; for (int i = 0; i < data.Length; i++) retVal = retVal + string.Format("0x{0:x2},", data[i]); return retVal; } static void Main(string[] args) { new System.Threading.Thread(Program.CheckThread).Start(0); new System.Threading.Thread(Program.CheckThread).Start(1); new System.Threading.Thread(Program.CheckThread).Start(2); new System.Threading.Thread(Program.CheckThread).Start(3); } static void CheckThread(object start) { byte[] plain = new byte[16]; byte[] encrypted = new byte[] { 0x2a, 0x84, 0x21, 0x38, 0xe8, 0xc0, 0x2d, 0x1c, 0xd5, 0x61, 0xc2, 0x1d, 0x67, 0xf9, 0x58, 0xce, }; byte[] key = new byte[16]; RijndaelManaged rijAlg = new RijndaelManaged(); var iv = new byte[16]; // init vektors visas nules; rijAlg.Padding = PaddingMode.None; rijAlg.IV = iv; for (int i =(int)start; i < int.MaxValue; i+=4) { Random rand = new Random(i); rand.NextBytes(key); // izmantojam random atslegu rijAlg.Key = key; rijAlg.CreateDecryptor(key, iv).TransformBlock(encrypted, 0, 16, plain, 0); bool check = true; for (int j = 0; j < 16; j++) if (plain[j] < 'a' || plain[j] > 'z') { check = false; break; } if (check) { Console.WriteLine("Found!!! {0}", System.Text.Encoding.ASCII.GetString(plain)); Console.WriteLine(i); Console.WriteLine("Key: {0}", ByteToHex(key)); System.Diagnostics.Process.GetCurrentProcess().Kill(); } if (i % 1000000 < 4) Console.WriteLine(i); } Console.WriteLine("Not found. "); } } } Labots Aprīlis 25, 2012 - Vilx- Link to comment Share on other sites More sharing options...
0xDEAD BEEF Aprīlis 25, 2012 Author Share Aprīlis 25, 2012 Patiesībā - Vilx risinājums ir elegants un ātrs. Tas, ko es gadīju, tikai uber formā. Bet - kas mani patiešām interesē ir - kādus pigorus izdomāja Kirils?! Beefs Link to comment Share on other sites More sharing options...
atkarigais Aprīlis 25, 2012 Share Aprīlis 25, 2012 ........ Un starpcitu - vai tu esi uzinstalējis uz mana PC trojāni? Beefs Cauri ir, Vilx- tagad Tevi vēro Link to comment Share on other sites More sharing options...
Vilx- Aprīlis 25, 2012 Share Aprīlis 25, 2012 Link to comment Share on other sites More sharing options...
kirils Aprīlis 26, 2012 Share Aprīlis 26, 2012 pag, es pareizi lasu vilx kodu? vienkārši pārlasam random atslēgas vērtības? Patiesībā - Vilx risinājums ir elegants un ātrs. Tas, ko es gadīju, tikai uber formā. Bet - kas mani patiešām interesē ir - kādus pigorus izdomāja Kirils?! Beefs es šī uzdevuma risināšanu laicīgi atmetu. man nav C# vides uz datora, bet simulēt visas specifikas citā valodā būtu ilgi. beef, sha1sum("kirilsSystem.Byte[]") Link to comment Share on other sites More sharing options...
nemirst Maijs 1, 2012 Share Maijs 1, 2012 Es īsti nesapratu, kas domāts ar šo: 5e9078c024f1b1c3d002d8f1ced09de0 <-- slikts Kāds var izskaidrot? Link to comment Share on other sites More sharing options...
0xDEAD BEEF Maijs 2, 2012 Author Share Maijs 2, 2012 Sure. Es pielavu kludu, rakstot programmu. Vilx noradija uz kludu, tadel es pielaboju programmu (konkursa uzdevumu) ka rezultata ari mainijas output dati. BTW - Vilx iesutija atrisinajumu 3 minusu laika pec tam, kad biju publicejis izmainas ar pareizo kodu un vertibas. Es biju loti parsteigts par tik atru atbildi! Beefs Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!