Sprawdzanie sygnatury publicznym kluczem

0

Hej, Mam taki kod javovy

	public static boolean verify(String plainText, String signature,
			PublicKey publicKey) throws Exception {

		Signature publicSignature = Signature.getInstance("SHA256withRSA");
		publicSignature.initVerify(publicKey);
		publicSignature.update(plainText.getBytes(UTF_8));

		byte[] signatureBytes = Base64.getDecoder().decode(signature);

		return publicSignature.verify(signatureBytes);

	}

myslalem, ze napisalem dobrze odpowiednik w C#

        public static bool Verify(string message, string signature, RSAParameters publicKey)
        {
            var success = false;
            using (var rsaCryptoServiceProvider = new RSACryptoServiceProvider())
            {
                rsaCryptoServiceProvider.ImportParameters(publicKey);
                var encoder = new UTF8Encoding();
                byte[] bytesToVerify = encoder.GetBytes(message);

                //byte[] signedBytes = encoder.GetBytes(signature); ten tez nie dziala
                byte[] signedBytes = Convert.FromBase64String(signature);

                success = rsaCryptoServiceProvider.VerifyData(bytesToVerify, CryptoConfig.MapNameToOID("System.Security.Cryptography.SHA256CryptoServiceProvider"), signedBytes);

            }
            return success;
        }

jednak ten C# ciagle zwraca false. Wiec zanim powiem im ze wygenerowali zly klucz, wolalbym zeby ktos madry na to spojrzal ;) @Shalom akuratnie Twoja dzialka :D

1
  1. Lecą tam takie same bajty? Ten UTF decoder nie psuje nic?
  2. Może jedna oczekuje jakiegoś formatu PKCS a druga nie?
0

aha... oni wlasnie robia to kluczem publicznym

Boolean signatureVerification = verify(encryptedPayload, signature, publicKey);

a tych certyfikatow nie mam co oni uzywaja bo korzystali z KeyStore (mi wyslali tylko certy i sadze ze roznia sie od siebie)

1

Nie no ofc weryfikujesz ok, myślałem że generujesz podpis jednym kodem a drugim chcesz weryfikować i się zdziwiłem że masz ten sam klucz ;)

0

wywoluje api i dostaje zaszyfrowany tekst do ktorego mam prywatny klucz zeby odszyfrowac oraz sygnature zeby sprawdzic czy zaszyfrowany tekst jest poprawny. Do sprawdzenia sygnatury uzywam publicznego klucza

oba dostalem od zewnetrznej firmy (jak rowniez kod w java)

odszyfrowanie jak i weryfikacja nie dziala :(

0

przyklad javowy

String signature = "okfMCOR+tlWC5cK6U+S9OOa+iojZqQ4OVW0f5FZ8UqE1oNd4yLJdFw4UwYI8VUDmkdkqX0HBswdRD5wXKdCOn3vdEd+56YXHZPkcdQjQu8yDr5irR9xox7OYsuYrz7JDPhZsbMSTkemMyfJxGbiuYnjl5cVWC60TZBtn6ScgNUg2SQ65NI/BPdz8tqpBd6vGg0eN1Ma8r3Q2kxKJbCTfAUU9SuHe+4cgAF02cZTQdbrWN6dOTikvLPp2dq0NA/+jl8MraAy8DCQGX+LMtTf5pXOM85Cva87DgGUwCsxtCsHNZZgNKbR7AeTReqnJUTySIWp0ShZhJfhdIJ6u7cgAjQ==";

String encryptedPayload = "Bws64EOhWNnX0wxqvKIJg2dizjwbTgaFYUcR+JYTPub9R3akwNa+oHFi6h5TNHM3HDpPL7wbH2ZL4iaeI1THO1LDb+9LwDg+bkOvJDS5ahfV9O/fqdDUAXeTCuxhjHN5Q+THFguRcBKItOc3EQ9+zvHL514x/Zwg5AjzqTJHPbJvFFB0FybMv+y177r9Vl8yku8au9QzlR1dM2HyQvyCTqN/au7cmj3Kk4zSEiUq0v+zOkAZc4fJM1FH1RHRZLiu";

to co dostaje z api

"Ciphertext": "foVP0YwWMIDTg1YUzg2Vj/8AVFbu/XvAzWH1kaMp5nPO7YVD9T9haUIgSFvEWiVZK5k/Ny6jhJL+C+8wLC9kjl5NFmlfEQH5bGdu7MaAuBurEYa/AOt+erPqIUt45f85Bc+97jzw0DtVSOaUiK/x9h87EFOHSmwpi/s7753v9HSvFbn3nDhXV3MOrEKhW7nAn9ueroxlxf0jxpTZoP0HVm9AAdmWvuJeYJhdE14F68uMc+IAXekm+MAPoMNZCOsyTUOyYXIXfmnK/1rysNqjcDK41sAnGxierwoE8pNOQEAnKh5HpBI3W8AH+YNKR2xfLLtcgHmhunBDoEM/2YD2Li2Qv6OyjvUWn/7PNkp6shrMLf0SjqgCj2ia9gKVzZcPz5TH1xPjrBJBqGPJ9cSfDBBd9CqW4+D+owF1v6806AZUcVdfuzltSXLHOuLfbCGsUZZaaVJhPhP+QLAlC5v3XzgxxSVQ8OLUGhF3SxXrY0UICUJOunfm6vnqMAT36m8Ydsjc8qqV/Km1Fj5g+q4nJ3LLVwjyvlpBxOOhDi3W0y2SGh5l8JNtgKFuYKBVSUOeBwc3aX2r4jG+PzCObU6jvyiftc5Civ5Bl3NIwg30nyhk1035AaQEl4svCqCPiAz0+1xBtq7YeW4KwaMPjJHAwcgMY04Urm4ir2fiNpKy6Au1D/Giy4rYRF5/KoOv79GNdvMyL1PM7HhS6hqnc/YtXIggJkYh6STAzSlgVUb4C/X59wdaq736CQG0bm/0x56gSdNflDAXb4zsafFkN3daGTeY22xqPEOihLTYNdd4n2UDRKZdrn4dACEE8XskZsyK3I9fwbqj05COQJHRXfx9d9QNYL8g6BLsqpJGMT+zEtwOH18Yrzd7fGJ3uFFTa1GnhWhV00oCTClbLpJ1KI6FSGnC0iSFr/KwAQk1oCPKkrzDx4hwOsMxc/oQ52Kwjt5JP18SnSCWEmiu4ovQV95FUsMKzHaBjaKs109DrKWTHSgWLqFle/P3q6aa39PRggmbBLLcDQLLlri/6kBlHdFknnP1OIwNQhWgFAd0hgQK1FA7RAUak/PoOhaP1l1C0r8n0fTnU88rxWepXQJ47KEZQnm116c0S+O83iiBhRuM3jE0Dh6R3kpGAPrEk26/1IxF4tQi85gDRfdNTF1rUR/ijGZZXADwJxYgiIHhiyZIjKTcSuct/D7dQkxLZFtQ77xq7ZwRLY3BpiumoyDxXcOLREM4DsHkL/3xctgA81a9SjpVulal4SkzZqWL/8R0gKqIROpZuzA8bRxJizgl4lIrJ7HdNje+y4g79439acLjrGYkLkCZb7e1xOMS5rAuRLs4Fcdjc2rE1AzL5GEmZXfNjDddr6y5LWorojmBl28OP1Ft4YraeFd4vvh6VIOjgAE7xnuxBmyCXQ9+xV9Gr4pIk8tagSIU34orgDSwsbmVVdBCiz1i0SScVMwBtaEZadaevwh/vWqnZn8dSmoqvIdgsuaChwjPSgFbERcZ/+y5+c04Je1nSMXLa0G9T6g1hwtA214amkiwD4RuIg4kgA2eu9r22Hpc902WRiBl5ADCtWMDZJcmwQ6vNVyMcJMvuXH9/lsL548iSAdZrM5sd+aFGbc52FifFgKlYQdBti9DDUsi8FS79bR4nxLXuy37m9q0gdMcEm7XZRPzSksXiVhGm+lafw53muNCJwMLh7fwXB0IOqJ5zhfl6dYbSDOMisVa",

"Signature": "dxjVyIk8EGCEmlfdyDD3ljop1/IWOg0IHHiBwx+ItKTRE1/BfVZG0L866jc+aMvjVxBBJRA9mobz92tb9HeB7P6+ZlyDPjQxHmOUuAa/MJMuzeNYcCHxSSe5qVrwInw5h0pGn70wgtpfzZzeMqG2mW/yLG1bwnjoBLW+4UYXsjnZ2pv31RiFcNDJ7xesJOzyJa/pVAJrQW5JowoNKu4UzO/Tm/K6WZIXEY6g86S3Ddjezcu0lpFGRpxD1jeJBmat8etTpZYvDjYSZ26kSz+jnPiLaZeRBTglUEwORK6xQbnWOI9NQGl/GAfNpQSBck0iW5elvPf/2xU0VbeCKhC34A=="
1

No dobra to może zacznijmy "na pałe"? Te signature mają po 2048 bitów więc wyglądają na gołe payloady. No to zweryfikujmy je "ręcznie", co za problem :)

  1. Weź klucz publiczny i rozkoduj go (jakimś dekoderem ANS1 albo załaduj do jakiegoś PyCrypto) na parę e,n, zgaduje że e=65537 a n to będzie ta druga duża liczba
  2. Weź podpis, zamień go na liczbę s = int(signature.decode("base64").encode("hex"),16)
  3. Wykonaj v = pow(s,e,n) i zamień to na hexbajty -> h = hex(v)
  4. Teraz weź tekst dla którego weryfikujesz podpis, policz z niego SHA256 i porównaj h z tym co wyszło
  5. Profit!
0

@Shalom: biore ta sygnature (ta co sie zaczyna na okf). konwertuje na byte[] z base64 nastepnie robie cos takiego

        public static string ByteArrayToString(byte[] byteArray)
        {
            var hex = new StringBuilder(byteArray.Length * 2);
            foreach (var b in byteArray)
                hex.AppendFormat("{0:x2}", b);
            return hex.ToString();
        }

by miec stringa hexdecymalnego, ale jak juz probuje parsowac ta liczbe na inta / longa to wykrzacza sie bo jest ta liczba troche duza. Wydaje mi sie, ze ta liczba ma byc tak glupio duza, ale nie jestem pewien dlatego wole zapytac. Takze z pow z trzema argumentami chodzi o s^e^n? (nie wiem jak wlaczyc latexa)

1

Nie, to jest powmod -> s^e mod n. Większość języków ma takie coś w standardzie, python ma, java na swoich BigInteger też ma. Use the python Luke :P

0

cos musze robic zle bo hash z signatury jest

983e07b3e0dc1e9964cd9cf2a36dbc2383a0037d03a972d830b6250fe82428d6

ja natosmiat dostaje

362C0617A87AE186397B3454E992698C1CF7FA516866E0EEEE81186897913F35914807D8EA4A63CA7694228E111D78B785B108E2F95140C43B578E5FD2825CF18634A67BE22848EB89199CB07A941B63B5660EBE74B8BAAFDBBB330CD90B5BF6C4D9CFA400AFB57C2B16C182FB556EA3BB284A203524C9B74D2D22166A125BFF4C5A15F3D441796AE0D55216287D79F101278D1659694DA05DDC017831868A05AED6A517CDF5B25FF97844B8AD3476BAE2A40523983D1B851A7880E9EFBF7E3DB466C98B941CCD31F35056DCD4B244AC0DDE3A297D3DD004C52FEA70866080359B47DB1402A6211AE32CA06FE1D748799CC3625EC46E00A6BEDCCE2D44B160D64BC5E48383A20FBA16D96AE288965B24864B4E8E5FD2A1F37954F0CF9CD7509285249F4368B0693CC4D5976C234837BEB278FFC06230E27CF43147BEE912173777D5F006AFF902DB40C5CE92D02C7857A19899B11AAB564169E51899563F96E05E88985246C0B84D9DFE2D7A27EC298B9D619C4608BC10AA6EDBF956B7E19AC2895105B1D147670D224445EC7DC8D49F161E224E2773984496B00269608A17E52122DEF9998B14FB7247D6993C175374147ADF6BE6FB22C9696B30A5E4ECB7B6D9F67F3C4D3BB74DEBE7E834E223EE4D35E301EDB6882033DD70CD97748C1B925403B6E34E07681BB1CB071B040F9D2BB4F3ED8462401F4F73F010D3E403D7B10362CF4CBFDA1F260F2C02E6DA30BC48726D07D98DFB23C7A99A1FE3D7B6267F90E3F2EFE930EC4C721FCFC4ED14111EC34337C1B6638EBC8AAE6E863FE2D16E2BA0BF88DCDF32A557C1E426FCBE68EDDC5200AF4E2BB63776ED378445BE9EAE95C379D69314313159

takze troche za duze to to :) wiec

dla sygnatury hex jest (tutaj moze jest blad)

a247cc08e47eb65582e5c2ba53e4bd38e6be8a88d9a90e0e556d1fe4567c52a135a0d778c8b25d170e14c1823c5540e691d92a5f41c1b307510f9c1729d08e9f7bdd11dfb9e985c764f91c7508d0bbcc83af98ab47dc68c7b398b2e62bcfb2433e166c6cc49391e98cc9f27119b8ae6278e5e5c5560bad13641b67e92720354836490eb9348fc13ddcfcb6aa4177abc683478dd4c6bcaf74369312896c24df01453d4ae1defb8720005d367194d075bad637a74e4e292f2cfa7676ad0d03ffa397c32b680cbc0c24065fe2ccb537f9a5738cf390af6bcec38065300acc6d0ac1cd65980d29b47b01e4d17aa9c9513c92216a744a166125f85d209eaeedc8008d
e = 65537
var nString = "20606789879849828503991732422198820089998544041718433776796368054313482157131791733333840607037430462855107147426802262091416287646056939723818899466453422180245650073746927239599545414027268473008576675447700438455019013548032384264923545463906204558022802038888461764838385192220519349505122933755491433405758110552798884092196864441628444849952903509703282289356774009875487790464659284403593583527361250240727610673550887225926562152786778197198154103130045973157635416497671063430497539759238535416340586112305161581182697940253333904129926218755752222977553398540888864471742564599643479320942217843650270761327";
BinIntegerN =  1650923596043924604583802263565800144441875375787280714166653419289798521473398789793859383666735099767617889545662092911705180025981671821529556502641792094107878695916969647191725267340489308650406349846476288254551548580533703176244855710076211834104038697847612686926014440761098962487765759889323544432107934816058879374280969061757557822899896507481958505362816817290814632756976108012790462499972785217373485396297519658979639476238438266355708405689910396607589634011308816233800500351048852961068731335490904416245025355845672721975772403406426772401157222766303893788890176270350025724476962645067361721135631472378232461281091124937840297318761549638515247261401491077864306592177242044685029466882522822152645563786196118166270210066464038437654563038051131845371223309038993239203237106870653795586880164341673882903614508016930993740490183377756997556874966009372233365298547649142938443187876070383344871031209246865255372870285033217926858847354560108130623375285039637624357665721338316210416049704885217244009235357794513745533848726071473741678814891977412710942677540861306958494389539767287153911670683343058862800492942581128592634131803393330917689533191140917002505081203477059574653774497984074000063426091072420898446458073457316069548774595265274251794410760996407375546625849656945057156727518550319085354010444925108417199184667957431510801243959296153178371886839271396173802106231481704083696591707987209598819892971143694548678530808167984971355038036018

kod dla modpow

var result = BigInteger.ModPow(s, e, n);

daje

{1620291840779971182248033779252971221888341903863069434980714740781112452646323036738644216932819848357015909382892867471965158252281177841038742113007394993036765233206514147614083124451316733248757503106429729303609149383512280633215271290781822936895517357396824768471142360290140757200141201309717599791014117957057025831050969434336412295770222442483184327649725589204758586979821036821941491349101932358865111503660660584865078895786343162638822116910100871809325157240136860111833699009313977913198643927961486554561368618969091762284580777037978608346149662027908049407864884088994800114514484287204419196500626169149659816208408673169870827338359760258067738338524267779944883653283629219367229288411494899661296969334925404898178106252730445583199981011534727611878945117458342641620871191554684011296477257908483774649826473025022904017293145324562420368119730633797977478860959016645091763139251708314427672175022381456208046001206911969718062156913445844937162317367871361988155035748147593069626456377969413339561983800053390297858858291880980312124439378182041462449946852673364980560615505665873965948522047243767430728029851216664254235174941625610486764733516621402635621349614441085364815591596925262941167006055641212543786292549918265227015681983817331849236283254623669825947123910084476711307587931699014306689897369388672493019265516380320738589094522386703844696875333384427625328221970664563926834547574128282527622116972714762477253899597896796669627392405849}

natomiast hex z tego to jest wlasnie to co napisalem w to co ja dostaje czyli

362C0617A87AE186397B3454E992698C1CF7FA516866E0EEEE81186897913F35914807D8EA4A63CA7694228E111D78B785B108E2F95140C43B578E5FD2825CF18634A67BE22848EB89199CB07A941B63B5660EBE74B8BAAFDBBB330CD90B5BF6C4D9CFA400AFB57C2B16C182FB556EA3BB284A203524C9B74D2D22166A125BFF4C5A15F3D441796AE0D55216287D79F101278D1659694DA05DDC017831868A05AED6A517CDF5B25FF97844B8AD3476BAE2A40523983D1B851A7880E9EFBF7E3DB466C98B941CCD31F35056DCD4B244AC0DDE3A297D3DD004C52FEA70866080359B47DB1402A6211AE32CA06FE1D748799CC3625EC46E00A6BEDCCE2D44B160D64BC5E48383A20FBA16D96AE288965B24864B4E8E5FD2A1F37954F0CF9CD7509285249F4368B0693CC4D5976C234837BEB278FFC06230E27CF43147BEE912173777D5F006AFF902DB40C5CE92D02C7857A19899B11AAB564169E51899563F96E05E88985246C0B84D9DFE2D7A27EC298B9D619C4608BC10AA6EDBF956B7E19AC2895105B1D147670D224445EC7DC8D49F161E224E2773984496B00269608A17E52122DEF9998B14FB7247D6993C175374147ADF6BE6FB22C9696B30A5E4ECB7B6D9F67F3C4D3BB74DEBE7E834E223EE4D35E301EDB6882033DD70CD97748C1B925403B6E34E07681BB1CB071B040F9D2BB4F3ED8462401F4F73F010D3E403D7B10362CF4CBFDA1F260F2C02E6DA30BC48726D07D98DFB23C7A99A1FE3D7B6267F90E3F2EFE930EC4C721FCFC4ED14111EC34337C1B6638EBC8AAE6E863FE2D16E2BA0BF88DCDF32A557C1E426FCBE68EDDC5200AF4E2BB63776ED378445BE9EAE95C379D69314313159
1

Hm no zacznijmy od tego ze coś źle liczysz :D Bo dla danych które podałeś to wychodzi jednak co innego. Ale i tak nic sensownego. A tym kodem javowym udało ci się to zweryfikować? Bo jeśli tak, to coś tutaj pomieszaliśmy, ale jeśli nie to bardzo możliwe że klucz RSA nie pasuje. Bo nie wychodzi ani bezpośredni payload ani jakies PKCS1.5 z tego.
Nie żebym nie ufał twoim konwersją, ale mógłbyś podać dane (szczególnie signature) w takiej postaci w jakiej je dostajesz? ;]
Poza tym twoje n NA PEWNO jest błędne, bo jestem pewien ze nie jest parzyste ani tym bardziej się nie faktoryzuje -> http://factordb.com/index.php?query=1650923596043924604583802263565800144441875375787280714166653419289798521473398789793859383666735099767617889545662092911705180025981671821529556502641792094107878695916969647191725267340489308650406349846476288254551548580533703176244855710076211834104038697847612686926014440761098962487765759889323544432107934816058879374280969061757557822899896507481958505362816817290814632756976108012790462499972785217373485396297519658979639476238438266355708405689910396607589634011308816233800500351048852961068731335490904416245025355845672721975772403406426772401157222766303893788890176270350025724476962645067361721135631472378232461281091124937840297318761549638515247261401491077864306592177242044685029466882522822152645563786196118166270210066464038437654563038051131845371223309038993239203237106870653795586880164341673882903614508016930993740490183377756997556874966009372233365298547649142938443187876070383344871031209246865255372870285033217926858847354560108130623375285039637624357665721338316210416049704885217244009235357794513745533848726071473741678814891977412710942677540861306958494389539767287153911670683343058862800492942581128592634131803393330917689533191140917002505081203477059574653774497984074000063426091072420898446458073457316069548774595265274251794410760996407375546625849656945057156727518550319085354010444925108417199184667957431510801243959296153178371886839271396173802106231481704083696591707987209598819892971143694548678530808167984971355038036018
Więc możliwe że klucz publiczny też coś źle rozpakowałeś... :)

0

tak myslalem ze cos zle licze :D

niestety kodu javovego nie opale bo nie ma certyfikatow. Nastepnym krokiem bylo podpiecie certyfikatow tych ktorych mam.

Signature i EncryptedText juz podalem wyzej dla wersji javowej i to ktorej dostaje od API :) ale podam jeszcze raz

fasadin napisał(a):

przyklad javowy

String signature = "okfMCOR+tlWC5cK6U+S9OOa+iojZqQ4OVW0f5FZ8UqE1oNd4yLJdFw4UwYI8VUDmkdkqX0HBswdRD5wXKdCOn3vdEd+56YXHZPkcdQjQu8yDr5irR9xox7OYsuYrz7JDPhZsbMSTkemMyfJxGbiuYnjl5cVWC60TZBtn6ScgNUg2SQ65NI/BPdz8tqpBd6vGg0eN1Ma8r3Q2kxKJbCTfAUU9SuHe+4cgAF02cZTQdbrWN6dOTikvLPp2dq0NA/+jl8MraAy8DCQGX+LMtTf5pXOM85Cva87DgGUwCsxtCsHNZZgNKbR7AeTReqnJUTySIWp0ShZhJfhdIJ6u7cgAjQ==";

String encryptedPayload = "Bws64EOhWNnX0wxqvKIJg2dizjwbTgaFYUcR+JYTPub9R3akwNa+oHFi6h5TNHM3HDpPL7wbH2ZL4iaeI1THO1LDb+9LwDg+bkOvJDS5ahfV9O/fqdDUAXeTCuxhjHN5Q+THFguRcBKItOc3EQ9+zvHL514x/Zwg5AjzqTJHPbJvFFB0FybMv+y177r9Vl8yku8au9QzlR1dM2HyQvyCTqN/au7cmj3Kk4zSEiUq0v+zOkAZc4fJM1FH1RHRZLiu";

to co dostaje z api

"Ciphertext": "foVP0YwWMIDTg1YUzg2Vj/8AVFbu/XvAzWH1kaMp5nPO7YVD9T9haUIgSFvEWiVZK5k/Ny6jhJL+C+8wLC9kjl5NFmlfEQH5bGdu7MaAuBurEYa/AOt+erPqIUt45f85Bc+97jzw0DtVSOaUiK/x9h87EFOHSmwpi/s7753v9HSvFbn3nDhXV3MOrEKhW7nAn9ueroxlxf0jxpTZoP0HVm9AAdmWvuJeYJhdE14F68uMc+IAXekm+MAPoMNZCOsyTUOyYXIXfmnK/1rysNqjcDK41sAnGxierwoE8pNOQEAnKh5HpBI3W8AH+YNKR2xfLLtcgHmhunBDoEM/2YD2Li2Qv6OyjvUWn/7PNkp6shrMLf0SjqgCj2ia9gKVzZcPz5TH1xPjrBJBqGPJ9cSfDBBd9CqW4+D+owF1v6806AZUcVdfuzltSXLHOuLfbCGsUZZaaVJhPhP+QLAlC5v3XzgxxSVQ8OLUGhF3SxXrY0UICUJOunfm6vnqMAT36m8Ydsjc8qqV/Km1Fj5g+q4nJ3LLVwjyvlpBxOOhDi3W0y2SGh5l8JNtgKFuYKBVSUOeBwc3aX2r4jG+PzCObU6jvyiftc5Civ5Bl3NIwg30nyhk1035AaQEl4svCqCPiAz0+1xBtq7YeW4KwaMPjJHAwcgMY04Urm4ir2fiNpKy6Au1D/Giy4rYRF5/KoOv79GNdvMyL1PM7HhS6hqnc/YtXIggJkYh6STAzSlgVUb4C/X59wdaq736CQG0bm/0x56gSdNflDAXb4zsafFkN3daGTeY22xqPEOihLTYNdd4n2UDRKZdrn4dACEE8XskZsyK3I9fwbqj05COQJHRXfx9d9QNYL8g6BLsqpJGMT+zEtwOH18Yrzd7fGJ3uFFTa1GnhWhV00oCTClbLpJ1KI6FSGnC0iSFr/KwAQk1oCPKkrzDx4hwOsMxc/oQ52Kwjt5JP18SnSCWEmiu4ovQV95FUsMKzHaBjaKs109DrKWTHSgWLqFle/P3q6aa39PRggmbBLLcDQLLlri/6kBlHdFknnP1OIwNQhWgFAd0hgQK1FA7RAUak/PoOhaP1l1C0r8n0fTnU88rxWepXQJ47KEZQnm116c0S+O83iiBhRuM3jE0Dh6R3kpGAPrEk26/1IxF4tQi85gDRfdNTF1rUR/ijGZZXADwJxYgiIHhiyZIjKTcSuct/D7dQkxLZFtQ77xq7ZwRLY3BpiumoyDxXcOLREM4DsHkL/3xctgA81a9SjpVulal4SkzZqWL/8R0gKqIROpZuzA8bRxJizgl4lIrJ7HdNje+y4g79439acLjrGYkLkCZb7e1xOMS5rAuRLs4Fcdjc2rE1AzL5GEmZXfNjDddr6y5LWorojmBl28OP1Ft4YraeFd4vvh6VIOjgAE7xnuxBmyCXQ9+xV9Gr4pIk8tagSIU34orgDSwsbmVVdBCiz1i0SScVMwBtaEZadaevwh/vWqnZn8dSmoqvIdgsuaChwjPSgFbERcZ/+y5+c04Je1nSMXLa0G9T6g1hwtA214amkiwD4RuIg4kgA2eu9r22Hpc902WRiBl5ADCtWMDZJcmwQ6vNVyMcJMvuXH9/lsL548iSAdZrM5sd+aFGbc52FifFgKlYQdBti9DDUsi8FS79bR4nxLXuy37m9q0gdMcEm7XZRPzSksXiVhGm+lafw53muNCJwMLh7fwXB0IOqJ5zhfl6dYbSDOMisVa",

"Signature": "dxjVyIk8EGCEmlfdyDD3ljop1/IWOg0IHHiBwx+ItKTRE1/BfVZG0L866jc+aMvjVxBBJRA9mobz92tb9HeB7P6+ZlyDPjQxHmOUuAa/MJMuzeNYcCHxSSe5qVrwInw5h0pGn70wgtpfzZzeMqG2mW/yLG1bwnjoBLW+4UYXsjnZ2pv31RiFcNDJ7xesJOzyJa/pVAJrQW5JowoNKu4UzO/Tm/K6WZIXEY6g86S3Ddjezcu0lpFGRpxD1jeJBmat8etTpZYvDjYSZ26kSz+jnPiLaZeRBTglUEwORK6xQbnWOI9NQGl/GAfNpQSBck0iW5elvPf/2xU0VbeCKhC34A=="

to jest N ktore podalem
screenshot-20190212123041.png

Nie ufaj moim konwersjom (ą?) czuje sie teraz jak swiezak z tutorialami do C++ :D

czyzby ten tool zle rozpkakowywal certyfikat?

1

@fasadin dobra, ten przykład z signature w base64 jest poprawny :)

e = 65537
n = 20606789879849828503991732422198820089998544041718433776796368054313482157131791733333840607037430462855107147426802262091416287646056939723818899466453422180245650073746927239599545414027268473008576675447700438455019013548032384264923545463906204558022802038888461764838385192220519349505122933755491433405758110552798884092196864441628444849952903509703282289356774009875487790464659284403593583527361250240727610673550887225926562152786778197198154103130045973157635416497671063430497539759238535416340586112305161581182697940253333904129926218755752222977553398540888864471742564599643479320942217843650270761327
s = int('dxjVyIk8EGCEmlfdyDD3ljop1/IWOg0IHHiBwx+ItKTRE1/BfVZG0L866jc+aMvjVxBBJRA9mobz92tb9HeB7P6+ZlyDPjQxHmOUuAa/MJMuzeNYcCHxSSe5qVrwInw5h0pGn70wgtpfzZzeMqG2mW/yLG1bwnjoBLW+4UYXsjnZ2pv31RiFcNDJ7xesJOzyJa/pVAJrQW5JowoNKu4UzO/Tm/K6WZIXEY6g86S3Ddjezcu0lpFGRpxD1jeJBmat8etTpZYvDjYSZ26kSz+jnPiLaZeRBTglUEwORK6xQbnWOI9NQGl/GAfNpQSBck0iW5elvPf/2xU0VbeCKhC34A=='.decode("base64").encode("hex"),16)
hex(pow(s,e,n))

To daje nam:
0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003031300d06096086480165030402010500042073426b35d825adec1c5e883b67e3fe995858a5714bafe5774442f5acb6365f2b
czyli klasyczny payload w postaci PKCS1.5, więc hash to ostatnie 64 hexy z tego -> 73426b35d825adec1c5e883b67e3fe995858a5714bafe5774442f5acb6365f2b i takie powinno być sha256 z twojego plaintextu

Więc klucze są poporawne i format podpisu to RSA-SHA256 PKCS1.5

Nie wiem jak to zmapować na to C# crypto api, ale akurat RSA jest proste jak budowa cepa (jak widać wyżej) wiec mozesz to zawsze liczyć na piechotę ;]

0

kurde nie wiem jak Tobie to wychodzi a mi nie :D

ale ciesze sie ze sa poprawne

jednak sha256 z plaintextu jest inne

plainText

Bws64EOhWNnX0wxqvKIJg2dizjwbTgaFYUcR+JYTPub9R3akwNa+oHFi6h5TNHM3HDpPL7wbH2ZL4iaeI1THO1LDb+9LwDg+bkOvJDS5ahfV9O/fqdDUAXeTCuxhjHN5Q+THFguRcBKItOc3EQ9+zvHL514x/Zwg5AjzqTJHPbJvFFB0FybMv+y177r9Vl8yku8au9QzlR1dM2HyQvyCTqN/au7cmj3Kk4zSEiUq0v+zOkAZc4fJM1FH1RHRZLiu

zrobione na sha256 daje nam hash

f1c42ca5879a6236d1aadebd760b8063df99d3915cc836d6dea58242841c3106

co jest inne od

73426b35d825adec1c5e883b67e3fe995858a5714bafe5774442f5acb6365f2b
1

plainText

plaintext to jakiś base64 encoded binary blob i jeszcze idealnie o długości 192? I call bullshit :P Ty hashujesz tekst zaszyfrowany jakimś szyfrem blokowym i enkodowany jako base64, a ja mówie o hashowaniu plaintextu, czyli tego co wychodzi po odszyfrowaniu :) Podpisany jest plaintext a nie ciphertext.

0

kod javowy ktory dostalem od klienta ktory podobno dziala


		String encryptedPayload = "Bws64EOhWNnX0wxqvKIJg2dizjwbTgaFYUcR+JYTPub9R3akwNa+oHFi6h5TNHM3HDpPL7wbH2ZL4iaeI1THO1LDb+9LwDg+bkOvJDS5ahfV9O/fqdDUAXeTCuxhjHN5Q+THFguRcBKItOc3EQ9+zvHL514x/Zwg5AjzqTJHPbJvFFB0FybMv+y177r9Vl8yku8au9QzlR1dM2HyQvyCTqN/au7cmj3Kk4zSEiUq0v+zOkAZc4fJM1FH1RHRZLiu";
		String encryptedKey = "BzG70DJRdJL4bOwKUQ7BqNLolGeL6JRXJxfZvMQ/VrpBLb7/Gij9gi6V1Ih+npb11zR0gCDV6Gd1c5aYPaaFSaAn3JlUcM/WXzmYQQvGLdUB5DodTpHf8o+uWY2rkO8XFWoPKjxJR3FGw6xLepgJ3P4A3N+vjhBFfL2zvQ2exIJ1FGVsmAMnVhk+PwAzpgrMBreEkiLXLJ9uM85MdqKyjPWDGLb6I6GzioEIxpzWJHz1hwsCMyXG0p2iVuKQ7oxPLWkcZjHJmm8uBTjn6HXx5XvAR8dQ60MJdDyKwzHAoWBo2guoYULV/dNFvhLfb7Sn+6EK+8hq3J6YK1rqB0AkAQ==";

		// Verificatie van de signature
		Boolean signatureVerification = verify(encryptedPayload, signature, publicKey);

	  public static boolean verify(String plainText, String signature,
			PublicKey publicKey) throws Exception {

		Signature publicSignature = Signature.getInstance("SHA256withRSA");
		publicSignature.initVerify(publicKey);
		publicSignature.update(plainText.getBytes(UTF_8));

		byte[] signatureBytes = Base64.getDecoder().decode(signature);

		return publicSignature.verify(signatureBytes);

	}

a plainTextu niestety nie mam. Musialbym najpierw decode zrobic by miec plaintext

tutaj widac ze sprawdza encrypted text. A encrypted Text nie zdekoduje bez prywatnego klucza ktory nie jest tutaj uzywany

1

A no dobra, ale to nadal działa wszystko w takim razie!

ct = 'foVP0YwWMIDTg1YUzg2Vj/8AVFbu/XvAzWH1kaMp5nPO7YVD9T9haUIgSFvEWiVZK5k/Ny6jhJL+C+8wLC9kjl5NFmlfEQH5bGdu7MaAuBurEYa/AOt+erPqIUt45f85Bc+97jzw0DtVSOaUiK/x9h87EFOHSmwpi/s7753v9HSvFbn3nDhXV3MOrEKhW7nAn9ueroxlxf0jxpTZoP0HVm9AAdmWvuJeYJhdE14F68uMc+IAXekm+MAPoMNZCOsyTUOyYXIXfmnK/1rysNqjcDK41sAnGxierwoE8pNOQEAnKh5HpBI3W8AH+YNKR2xfLLtcgHmhunBDoEM/2YD2Li2Qv6OyjvUWn/7PNkp6shrMLf0SjqgCj2ia9gKVzZcPz5TH1xPjrBJBqGPJ9cSfDBBd9CqW4+D+owF1v6806AZUcVdfuzltSXLHOuLfbCGsUZZaaVJhPhP+QLAlC5v3XzgxxSVQ8OLUGhF3SxXrY0UICUJOunfm6vnqMAT36m8Ydsjc8qqV/Km1Fj5g+q4nJ3LLVwjyvlpBxOOhDi3W0y2SGh5l8JNtgKFuYKBVSUOeBwc3aX2r4jG+PzCObU6jvyiftc5Civ5Bl3NIwg30nyhk1035AaQEl4svCqCPiAz0+1xBtq7YeW4KwaMPjJHAwcgMY04Urm4ir2fiNpKy6Au1D/Giy4rYRF5/KoOv79GNdvMyL1PM7HhS6hqnc/YtXIggJkYh6STAzSlgVUb4C/X59wdaq736CQG0bm/0x56gSdNflDAXb4zsafFkN3daGTeY22xqPEOihLTYNdd4n2UDRKZdrn4dACEE8XskZsyK3I9fwbqj05COQJHRXfx9d9QNYL8g6BLsqpJGMT+zEtwOH18Yrzd7fGJ3uFFTa1GnhWhV00oCTClbLpJ1KI6FSGnC0iSFr/KwAQk1oCPKkrzDx4hwOsMxc/oQ52Kwjt5JP18SnSCWEmiu4ovQV95FUsMKzHaBjaKs109DrKWTHSgWLqFle/P3q6aa39PRggmbBLLcDQLLlri/6kBlHdFknnP1OIwNQhWgFAd0hgQK1FA7RAUak/PoOhaP1l1C0r8n0fTnU88rxWepXQJ47KEZQnm116c0S+O83iiBhRuM3jE0Dh6R3kpGAPrEk26/1IxF4tQi85gDRfdNTF1rUR/ijGZZXADwJxYgiIHhiyZIjKTcSuct/D7dQkxLZFtQ77xq7ZwRLY3BpiumoyDxXcOLREM4DsHkL/3xctgA81a9SjpVulal4SkzZqWL/8R0gKqIROpZuzA8bRxJizgl4lIrJ7HdNje+y4g79439acLjrGYkLkCZb7e1xOMS5rAuRLs4Fcdjc2rE1AzL5GEmZXfNjDddr6y5LWorojmBl28OP1Ft4YraeFd4vvh6VIOjgAE7xnuxBmyCXQ9+xV9Gr4pIk8tagSIU34orgDSwsbmVVdBCiz1i0SScVMwBtaEZadaevwh/vWqnZn8dSmoqvIdgsuaChwjPSgFbERcZ/+y5+c04Je1nSMXLa0G9T6g1hwtA214amkiwD4RuIg4kgA2eu9r22Hpc902WRiBl5ADCtWMDZJcmwQ6vNVyMcJMvuXH9/lsL548iSAdZrM5sd+aFGbc52FifFgKlYQdBti9DDUsi8FS79bR4nxLXuy37m9q0gdMcEm7XZRPzSksXiVhGm+lafw53muNCJwMLh7fwXB0IOqJ5zhfl6dYbSDOMisVa'
hashlib.sha256(ct).hexdigest()
'73426b35d825adec1c5e883b67e3fe995858a5714bafe5774442f5acb6365f2b'
0

prosilbym o bardziej łopatologiczne wyjaśnienie, bo ja nie rozumiem jak to ma działac :D u mnie nie dziala :(

1

@fasadin: pacz:

Dane które powiedziałeś ze dostajesz z API:

"Ciphertext": "foVP0YwWMIDTg1YUzg2Vj/8AVFbu/XvAzWH1kaMp5nPO7YVD9T9haUIgSFvEWiVZK5k/Ny6jhJL+C+8wLC9kjl5NFmlfEQH5bGdu7MaAuBurEYa/AOt+erPqIUt45f85Bc+97jzw0DtVSOaUiK/x9h87EFOHSmwpi/s7753v9HSvFbn3nDhXV3MOrEKhW7nAn9ueroxlxf0jxpTZoP0HVm9AAdmWvuJeYJhdE14F68uMc+IAXekm+MAPoMNZCOsyTUOyYXIXfmnK/1rysNqjcDK41sAnGxierwoE8pNOQEAnKh5HpBI3W8AH+YNKR2xfLLtcgHmhunBDoEM/2YD2Li2Qv6OyjvUWn/7PNkp6shrMLf0SjqgCj2ia9gKVzZcPz5TH1xPjrBJBqGPJ9cSfDBBd9CqW4+D+owF1v6806AZUcVdfuzltSXLHOuLfbCGsUZZaaVJhPhP+QLAlC5v3XzgxxSVQ8OLUGhF3SxXrY0UICUJOunfm6vnqMAT36m8Ydsjc8qqV/Km1Fj5g+q4nJ3LLVwjyvlpBxOOhDi3W0y2SGh5l8JNtgKFuYKBVSUOeBwc3aX2r4jG+PzCObU6jvyiftc5Civ5Bl3NIwg30nyhk1035AaQEl4svCqCPiAz0+1xBtq7YeW4KwaMPjJHAwcgMY04Urm4ir2fiNpKy6Au1D/Giy4rYRF5/KoOv79GNdvMyL1PM7HhS6hqnc/YtXIggJkYh6STAzSlgVUb4C/X59wdaq736CQG0bm/0x56gSdNflDAXb4zsafFkN3daGTeY22xqPEOihLTYNdd4n2UDRKZdrn4dACEE8XskZsyK3I9fwbqj05COQJHRXfx9d9QNYL8g6BLsqpJGMT+zEtwOH18Yrzd7fGJ3uFFTa1GnhWhV00oCTClbLpJ1KI6FSGnC0iSFr/KwAQk1oCPKkrzDx4hwOsMxc/oQ52Kwjt5JP18SnSCWEmiu4ovQV95FUsMKzHaBjaKs109DrKWTHSgWLqFle/P3q6aa39PRggmbBLLcDQLLlri/6kBlHdFknnP1OIwNQhWgFAd0hgQK1FA7RAUak/PoOhaP1l1C0r8n0fTnU88rxWepXQJ47KEZQnm116c0S+O83iiBhRuM3jE0Dh6R3kpGAPrEk26/1IxF4tQi85gDRfdNTF1rUR/ijGZZXADwJxYgiIHhiyZIjKTcSuct/D7dQkxLZFtQ77xq7ZwRLY3BpiumoyDxXcOLREM4DsHkL/3xctgA81a9SjpVulal4SkzZqWL/8R0gKqIROpZuzA8bRxJizgl4lIrJ7HdNje+y4g79439acLjrGYkLkCZb7e1xOMS5rAuRLs4Fcdjc2rE1AzL5GEmZXfNjDddr6y5LWorojmBl28OP1Ft4YraeFd4vvh6VIOjgAE7xnuxBmyCXQ9+xV9Gr4pIk8tagSIU34orgDSwsbmVVdBCiz1i0SScVMwBtaEZadaevwh/vWqnZn8dSmoqvIdgsuaChwjPSgFbERcZ/+y5+c04Je1nSMXLa0G9T6g1hwtA214amkiwD4RuIg4kgA2eu9r22Hpc902WRiBl5ADCtWMDZJcmwQ6vNVyMcJMvuXH9/lsL548iSAdZrM5sd+aFGbc52FifFgKlYQdBti9DDUsi8FS79bR4nxLXuy37m9q0gdMcEm7XZRPzSksXiVhGm+lafw53muNCJwMLh7fwXB0IOqJ5zhfl6dYbSDOMisVa",

"Signature": "dxjVyIk8EGCEmlfdyDD3ljop1/IWOg0IHHiBwx+ItKTRE1/BfVZG0L866jc+aMvjVxBBJRA9mobz92tb9HeB7P6+ZlyDPjQxHmOUuAa/MJMuzeNYcCHxSSe5qVrwInw5h0pGn70wgtpfzZzeMqG2mW/yLG1bwnjoBLW+4UYXsjnZ2pv31RiFcNDJ7xesJOzyJa/pVAJrQW5JowoNKu4UzO/Tm/K6WZIXEY6g86S3Ddjezcu0lpFGRpxD1jeJBmat8etTpZYvDjYSZ26kSz+jnPiLaZeRBTglUEwORK6xQbnWOI9NQGl/GAfNpQSBck0iW5elvPf/2xU0VbeCKhC34A=="

klucz publiczny e,n biorę z tego co podałeś mi wyżej.

e = 65537
n = 20606789879849828503991732422198820089998544041718433776796368054313482157131791733333840607037430462855107147426802262091416287646056939723818899466453422180245650073746927239599545414027268473008576675447700438455019013548032384264923545463906204558022802038888461764838385192220519349505122933755491433405758110552798884092196864441628444849952903509703282289356774009875487790464659284403593583527361250240727610673550887225926562152786778197198154103130045973157635416497671063430497539759238535416340586112305161581182697940253333904129926218755752222977553398540888864471742564599643479320942217843650270761327
s = int('dxjVyIk8EGCEmlfdyDD3ljop1/IWOg0IHHiBwx+ItKTRE1/BfVZG0L866jc+aMvjVxBBJRA9mobz92tb9HeB7P6+ZlyDPjQxHmOUuAa/MJMuzeNYcCHxSSe5qVrwInw5h0pGn70wgtpfzZzeMqG2mW/yLG1bwnjoBLW+4UYXsjnZ2pv31RiFcNDJ7xesJOzyJa/pVAJrQW5JowoNKu4UzO/Tm/K6WZIXEY6g86S3Ddjezcu0lpFGRpxD1jeJBmat8etTpZYvDjYSZ26kSz+jnPiLaZeRBTglUEwORK6xQbnWOI9NQGl/GAfNpQSBck0iW5elvPf/2xU0VbeCKhC34A=='.decode("base64").encode("hex"),16)
h = hex(pow(s,e,n))[-65:-1] # -1 bo L

ct = 'foVP0YwWMIDTg1YUzg2Vj/8AVFbu/XvAzWH1kaMp5nPO7YVD9T9haUIgSFvEWiVZK5k/Ny6jhJL+C+8wLC9kjl5NFmlfEQH5bGdu7MaAuBurEYa/AOt+erPqIUt45f85Bc+97jzw0DtVSOaUiK/x9h87EFOHSmwpi/s7753v9HSvFbn3nDhXV3MOrEKhW7nAn9ueroxlxf0jxpTZoP0HVm9AAdmWvuJeYJhdE14F68uMc+IAXekm+MAPoMNZCOsyTUOyYXIXfmnK/1rysNqjcDK41sAnGxierwoE8pNOQEAnKh5HpBI3W8AH+YNKR2xfLLtcgHmhunBDoEM/2YD2Li2Qv6OyjvUWn/7PNkp6shrMLf0SjqgCj2ia9gKVzZcPz5TH1xPjrBJBqGPJ9cSfDBBd9CqW4+D+owF1v6806AZUcVdfuzltSXLHOuLfbCGsUZZaaVJhPhP+QLAlC5v3XzgxxSVQ8OLUGhF3SxXrY0UICUJOunfm6vnqMAT36m8Ydsjc8qqV/Km1Fj5g+q4nJ3LLVwjyvlpBxOOhDi3W0y2SGh5l8JNtgKFuYKBVSUOeBwc3aX2r4jG+PzCObU6jvyiftc5Civ5Bl3NIwg30nyhk1035AaQEl4svCqCPiAz0+1xBtq7YeW4KwaMPjJHAwcgMY04Urm4ir2fiNpKy6Au1D/Giy4rYRF5/KoOv79GNdvMyL1PM7HhS6hqnc/YtXIggJkYh6STAzSlgVUb4C/X59wdaq736CQG0bm/0x56gSdNflDAXb4zsafFkN3daGTeY22xqPEOihLTYNdd4n2UDRKZdrn4dACEE8XskZsyK3I9fwbqj05COQJHRXfx9d9QNYL8g6BLsqpJGMT+zEtwOH18Yrzd7fGJ3uFFTa1GnhWhV00oCTClbLpJ1KI6FSGnC0iSFr/KwAQk1oCPKkrzDx4hwOsMxc/oQ52Kwjt5JP18SnSCWEmiu4ovQV95FUsMKzHaBjaKs109DrKWTHSgWLqFle/P3q6aa39PRggmbBLLcDQLLlri/6kBlHdFknnP1OIwNQhWgFAd0hgQK1FA7RAUak/PoOhaP1l1C0r8n0fTnU88rxWepXQJ47KEZQnm116c0S+O83iiBhRuM3jE0Dh6R3kpGAPrEk26/1IxF4tQi85gDRfdNTF1rUR/ijGZZXADwJxYgiIHhiyZIjKTcSuct/D7dQkxLZFtQ77xq7ZwRLY3BpiumoyDxXcOLREM4DsHkL/3xctgA81a9SjpVulal4SkzZqWL/8R0gKqIROpZuzA8bRxJizgl4lIrJ7HdNje+y4g79439acLjrGYkLkCZb7e1xOMS5rAuRLs4Fcdjc2rE1AzL5GEmZXfNjDddr6y5LWorojmBl28OP1Ft4YraeFd4vvh6VIOjgAE7xnuxBmyCXQ9+xV9Gr4pIk8tagSIU34orgDSwsbmVVdBCiz1i0SScVMwBtaEZadaevwh/vWqnZn8dSmoqvIdgsuaChwjPSgFbERcZ/+y5+c04Je1nSMXLa0G9T6g1hwtA214amkiwD4RuIg4kgA2eu9r22Hpc902WRiBl5ADCtWMDZJcmwQ6vNVyMcJMvuXH9/lsL548iSAdZrM5sd+aFGbc52FifFgKlYQdBti9DDUsi8FS79bR4nxLXuy37m9q0gdMcEm7XZRPzSksXiVhGm+lafw53muNCJwMLh7fwXB0IOqJ5zhfl6dYbSDOMisVa'
real_h = hashlib.sha256(ct).hexdigest()

assert h==real_h

QED.

0

dobrze wiedziec ze certyfikaty sa dobre. Teraz jeszcze zostalo zaimplementowac to w c# :) ale jedna z mozliwosci jest wykluczona. Wielkie dzieki @Shalom :)

1

Możesz to zaklepać na pałe, bo widzisz że to 3 linijki są :P Ale jeśli nie, to moim zdaniem to: https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.rsapkcs1signaturedeformatter?view=netframework-4.7.2 jest to czego potrzebujesz, tylko musisz sam policzyć sobie to sha256 jak w tym ich examplu.

tak bym to widział z tego API:

public static bool Verify(string message, string signature, RSAParameters publicKey)
{
	using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
	{
		rsa.ImportParameters(publicKey);
		byte[] hash;
		using (SHA256 sha256 = SHA256.Create())
		{
			byte[] data = encoder.GetBytes(message);
			hash = sha256.ComputeHash(data);
		}
		byte[] signedHash = Convert.FromBase64String(signature);
		RSAPKCS1SignatureDeformatter RSADeformatter = new RSAPKCS1SignatureDeformatter(rsa);
		RSADeformatter.SetHashAlgorithm("SHA256");
		return RSADeformatter.VerifySignature(hash, signedHash);
	}
	return false;
}
0

wiec javovy przyklda nie dzialal z sygnatura, ale API juz dziala dobrze

szkoda ze nie wiedzialem tego wczesniej :D

@Shalom ciagle zaskakujesz jak to dzialasz w innych jezykach i to sprawniej niz osoba ktora pracuje codziennie z danych jezykiem. Czuje sie jak stazysta :D

Teraz tylko decrypt, ale ze zdobyta wiedza, powinno juz pojsc troche sprawniej mam nadzieje

1 użytkowników online, w tym zalogowanych: 0, gości: 1