🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
11 messages
11 total messages Started by kameleonsql Tue, 27 Dec 2016 08:35
Szyfrowanie plików JPK z użyciem SecureBox'a
#345481
Author: kameleonsql
Date: Tue, 27 Dec 2016 08:35
98 lines
4932 bytes
Witam,
mamy mały problem z szyfrowaniem plików JPK używając SecureBox'a (Delphi 2010). Kod był zlecony na zewnątrz firmy (niestety programista, który to robił jest nieosiągalny ...) i kurcze dopiero teraz się okazało, że  jest błąd w szyfrowaniu (nikt nie wie dlaczego dopiero teraz :( to wyszło, ale cóż się zdarza).Generalnie problem polega chyba na implementacji zmiennych bo jak jest (tak jest w wersji w której server MF zwraca błąd, co prawda UOP przychodzi po kilkunastu godzina) tak : 
  
Crypto := Fac.CreateInstance(SB_ALGORITHM_CNT_AES256) 

to serwer MF zwraca błąd 412 (plik nieprawidłowo zaszyfrowany), ale kod działa i plik jest szyfrowany. Natomiast jeśli użyję się (chyba to powinno być szyfrowane w ten sposób) 

Crypto := Fac.CreateInstance(SB_ALGORITHM_DGST_SHA256,cmCBC); 

to mamy błąd  EAccess Viol .... w 

Crypto.KeyMaterial := KM; 

Szukam kogoś "kumatego" w temacie, co by oczywiście odpłatnie to szybko poprawił ..

Całość kodu do szyfrowania poniżej.

function JPK_AES_Encode(InDataStream: TmemoryStream; UsedUniqueKey: string;
  out IV_Base64: AnsiString): TmemoryStream;
var
  Fac: TElSymmetricCryptoFactory;
  CP: TElWin32CryptoProvider;
  CPOps: TElWin32CryptoProviderOptions;
  Crypto: TElSymmetricCrypto;
  KM: TElSymmetricKeyMaterial;
  Key, IV: ByteArray;
  TestStream: TmemoryStream;
begin
  Result := TmemoryStream.Create;
  try
    // przenosimy wygenerowany wcześniej klucz do ByteArray
    SetLength(Key, 32);
    System.Move(UsedUniqueKey[1], Key[0], 32);

    // UWAGA: wg niektórych powinien to być bieżace data/czas z dokładnościa do 0.001 sek.
    SetLength(IV, 16);
    SBRndGenerate(@IV[0], Length(IV));
    Fac := TElSymmetricCryptoFactory.Create();
    try
      CPOps := TElWin32CryptoProviderOptions.Create();
      try
        CPOps.UseForSymmetricKeyOperations := TRUE;
        CP := TElWin32CryptoProvider.Create(CPOps, NIL);
        try
          Fac.CryptoProvider := CP;
          // UWAGA: to MUSI być AES256 !!!
          // SB_ALGORITHM_PK_RSA
          Crypto := Fac.CreateInstance(SB_ALGORITHM_CNT_AES256);
          try
            KM := TElSymmetricKeyMaterial.Create(CP);
            try
              TestStream := TmemoryStream.Create;
              // UWAGA: klucz NIE jest zaszyfrowany w tym przypadku...
              KM.Key := Key;
              KM.IV := IV;
              // przekazujemy IV jako Base64
              IV_Base64 := TIdEncoderMIME.EncodeBytes(TIdBytes(IV));
              Crypto.KeyMaterial := KM;
              // szyfrowanie
              InDataStream.Position := 0;
              Crypto.Encrypt(InDataStream, Result);
              Result.Position := 0;
              // deszyfrowanie (dla testu - potem można będzie wyrzucić ew.)

              Crypto.Decrypt(Result, TestStream);
              Result.Position := 0;
              // weryfikacja...
              if not StreamsCompare(TestStream, InDataStream) then
                Raise Exception.Create
                  ('Bład szyfrowania wygenerowanego hasła jednorazowego (AES)!');
              Result.Position := 0;
{$IFDEF DEBUG}
              Result.SaveToFile(SetJpkXmlSendFile + 'test.zip.aes');
              Result.Position := 0;
{$ENDIF}
              InDataStream.Position := 0;
            finally
              if Assigned(TestStream) then
                TestStream.Free;
              FreeAndNil(KM);
            end;
          finally
            FreeAndNil(Crypto);
          end;
        finally
          FreeAndNil(CP);
        end;
      finally
        FreeAndNil(CPOps);
      end;
    finally
      FreeAndNil(Fac);
    end;
  except
    FreeAndNil(Result);
    Raise ;
  end;
end;
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345483
Author: Roman Tyczka
Date: Thu, 29 Dec 2016 16:04
26 lines
1725 bytes
On Tue, 27 Dec 2016 00:35:22 -0800 (PST), kameleonsql@gmail.com wrote:

> mamy mały problem z szyfrowaniem plików JPK używając SecureBox'a (Delphi 2010).

Mały? Na pewno? ;-)

> Kod był zlecony na zewnątrz firmy (niestety programista, który to robił 
> jest nieosiągalny ...) i kurcze dopiero teraz się okazało, że  jest błąd w 
> szyfrowaniu (nikt nie wie dlaczego dopiero teraz :( to wyszło, ale cóż 
> się zdarza).

Czy dobrze mi się wydaje, że sprzedawałeś ten kod na tutejszej grupie?

> Generalnie problem polega chyba na implementacji zmiennych bo jak jest 

Nie mam pojęcia co to jest implementacja zmiennych, ale...

[...]

> Szukam kogoś "kumatego" w temacie, co by oczywiście odpłatnie to szybko poprawił ..

...mogę Ci zrobić to szyfrowanie, powiedzmy za 8k, wchodzisz?

-- 
pozdrawiam
Roman Tyczka
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345484
Author: mmm
Date: Thu, 29 Dec 2016 21:08
24 lines
1891 bytes
W dniu 2016-12-29 o 17:04, Roman Tyczka pisze:
> On Tue, 27 Dec 2016 00:35:22 -0800 (PST), kameleonsql@gmail.com wrote:
>
>> mamy mały problem z szyfrowaniem plików JPK używając SecureBox'a (Delphi 2010).
>
> Mały? Na pewno? ;-)
Małe firmy to mają jeszcze rok i dwa dni , średnie trochę krócej jeszcze 
trochę czasu jest. Zamiast na bal sylwestrowy można dłubać.
>
>
> Czy dobrze mi się wydaje, że sprzedawałeś ten kod na tutejszej grupie?
Pewnie pierwszy który kupił był testerem.  I pojawiły sie pierwsze 
zgłoszone błędy.

Ciekawi mnie najbardziej dlaczego taki nacisk SecureBox ? To az takie 
wspaniałe jest ?  Tak ogladalem PDF-y z opisem formatu to jest 
objaśnione "jak krowie na rowie" skad wiadomo ze komponent jest poprawny ?

>> Szukam kogoś "kumatego" w temacie, co by oczywiście odpłatnie to szybko poprawił ..
>
> ...mogę Ci zrobić to szyfrowanie, powiedzmy za 8k, wchodzisz?
>

M
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345485
Author: konsul41
Date: Fri, 30 Dec 2016 07:53
58 lines
3371 bytes
W dniu 29-12-2016 o 22:08, mmm pisze:
> W dniu 2016-12-29 o 17:04, Roman Tyczka pisze:
>> On Tue, 27 Dec 2016 00:35:22 -0800 (PST), kameleonsql@gmail.com wrote:
>>
>>> mamy mały problem z szyfrowaniem plików JPK używając SecureBox'a
>>> (Delphi 2010).
>>
>> Mały? Na pewno? ;-)
> Małe firmy to mają jeszcze rok i dwa dni , średnie trochę krócej jeszcze
> trochę czasu jest. Zamiast na bal sylwestrowy można dłubać.

JPK-VAT rusza od 1-01-2017 więc tylko 1 miesiąc 25dni + 2 dnii.

Do samego wysyłania jest program na stronie MF ale podpisywanie we 
własnym zakresie (dziwne to jest).

Osobiście (to nie reklama, a podpowiedź) używam
http://jpk.dobry.pl/
cena nie jest wygórowana (a spotkałem się nawet z 5000 za program).
można ukryć całość używając dll.

Albo tak
ShellExecute(Handle, 'open', 'C:\Program Files\IPSPI\JotPeK\JotPeK.exe', 
PChar('/jpk='+katalog+'\'+filename+' /outpath='+katalog+'\'), 
'C:\Program Files\IPSPI\JotPeK\', SW_NORMAL);

Albo dll i tak

AddXMLJPKFile(PChar(katalog+'\'+filename),0);
  ShowError;
   SetLic('LIC**************');
   idSession:=SignSendJPK(cCzyTest,nil,nil,false); //Inicjalizacja wysyłki.
   if idSession<>nil then
   begin
     SetProgressCaption(idSession,'Wysyłanie pliku XML na serwer 
Ministerstwa Finansów '); //Ustawienie tekstu na progress-bar
     repeat
       //i:=WaitForEnd(idSession,vRefsNum);
     until (WaitForEnd(idSession,vRefsNum)>0);
      //Oczekiwanie na zakończenie procesu wysyłki
     if vRefsNum<>nil then //Jeśli wysyłka przebiegła prawidłowo, tzn. 
jest numer referencyjny.
     begin
//      ..Tutaj zapisanie numeru referencyjnego …
       Sleep(5000); //Trochę dać czasu serwerowi M.F.
       if GetUPO(cCzyTest,vRefsNum,vUPO,vStatus,vStatusText) then 
//Odczyt statusu
       begin
         ShowMessage('Status '+IntToStr(vStatus)+#13+ vStatusText+#13+vUPO);
//        ..Tutaj zapisanie statusu i upo. //UPO prawdopodobnie jeszcze 
nie będzie
       end else ShowError;
     end else ShowError;
   end else ShowError;

---
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345486
Author: immo
Date: Fri, 30 Dec 2016 07:55
8 lines
1583 bytes
W dniu czwartek, 29 grudnia 2016 17:04:51 UTC+1 użytkownik Roman Tyczka napisał:

> ...mogę Ci zrobić to szyfrowanie, powiedzmy za 8k, wchodzisz?

Jeśli to nie ironia której nie wyłapałem, to właśnie grupa dla osób takich jak ja umarła na dobre :/

pozdrawiam,
Przemek O.
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345488
Author: Roman Tyczka
Date: Fri, 30 Dec 2016 09:30
12 lines
1242 bytes
On Thu, 29 Dec 2016 23:55:43 -0800 (PST), immo wrote:

>> ...mogę Ci zrobić to szyfrowanie, powiedzmy za 8k, wchodzisz?
> 
> Jeśli to nie ironia której nie wyłapałem, to właśnie grupa dla osób takich jak ja umarła na dobre :/


Co to są "osoby takie jak ja"?

-- 
pozdrawiam
Roman Tyczka
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345490
Author: kameleonsql
Date: Sun, 01 Jan 2017 11:39
31 lines
2607 bytes
W dniu czwartek, 29 grudnia 2016 17:04:51 UTC+1 użytkownik Roman Tyczka napisał:
> On Tue, 27 Dec 2016 00:35:22 -0800 (PST), kameleonsql@gmail.com wrote:
> 
> > mamy mały problem z szyfrowaniem plików JPK używając SecureBox'a (Delphi 2010).
> 
> Mały? Na pewno? ;-)
> 
> > Kod był zlecony na zewnątrz firmy (niestety programista, który to robił 
> > jest nieosiągalny ...) i kurcze dopiero teraz się okazało, że  jest błąd w 
> > szyfrowaniu (nikt nie wie dlaczego dopiero teraz :( to wyszło, ale cóż 
> > się zdarza).
> 
> Czy dobrze mi się wydaje, że sprzedawałeś ten kod na tutejszej grupie?
> 
> > Generalnie problem polega chyba na implementacji zmiennych bo jak jest 
> 
> Nie mam pojęcia co to jest implementacja zmiennych, ale...
> 
> [...]
> 
> > Szukam kogoś "kumatego" w temacie, co by oczywiście odpłatnie to szybko poprawił ..
> 
> ...mogę Ci zrobić to szyfrowanie, powiedzmy za 8k, wchodzisz?
> 
> -- 
> pozdrawiam
> Roman Tyczka

Serwus,
Dobrze Ci się wydawało mój imiennku :), sprzedałem te kod (oczywiście dorzucając poprawkę)... 
Problem rozwiązany, działa perfekcyjnie :)
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345482
Author: kameleonsql
Date: Sun, 01 Jan 2017 11:44
28 lines
2732 bytes
W dniu czwartek, 29 grudnia 2016 22:08:30 UTC+1 użytkownik mmm napisał:
> W dniu 2016-12-29 o 17:04, Roman Tyczka pisze:
> > On Tue, 27 Dec 2016 00:35:22 -0800 (PST), kameleonsql@gmail.com wrote:
> >
> >> mamy mały problem z szyfrowaniem plików JPK używając SecureBox'a (Delphi 2010).
> >
> > Mały? Na pewno? ;-)
> Małe firmy to mają jeszcze rok i dwa dni , średnie trochę krócej jeszcze 
> trochę czasu jest. Zamiast na bal sylwestrowy można dłubać.
> >
> >
> > Czy dobrze mi się wydaje, że sprzedawałeś ten kod na tutejszej grupie?
> Pewnie pierwszy który kupił był testerem.  I pojawiły sie pierwsze 
> zgłoszone błędy.
> 
> Ciekawi mnie najbardziej dlaczego taki nacisk SecureBox ? To az takie 
> wspaniałe jest ?  Tak ogladalem PDF-y z opisem formatu to jest 
> objaśnione "jak krowie na rowie" skad wiadomo ze komponent jest poprawny ?
> 
> >> Szukam kogoś "kumatego" w temacie, co by oczywiście odpłatnie to szybko poprawił ..
> >
> > ...mogę Ci zrobić to szyfrowanie, powiedzmy za 8k, wchodzisz?
> >
> 
> M

Widzę, że nie próbowałeś tego programować, tak dla przykładu na  to,  że masz podane jak "krowie na rowie" np. to, ze taki typ http://jpk.guru/baza-wiedzy/typy-danych (ten sam typ zdefiniowany 3 raz :)) ... Takich błędów niedomówień jest w całym JPK cała masa.
Pozdrawiam
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345491
Author: kameleonsql
Date: Sun, 01 Jan 2017 11:46
35 lines
2597 bytes
W dniu czwartek, 29 grudnia 2016 17:04:51 UTC+1 użytkownik Roman Tyczka napisał:
> On Tue, 27 Dec 2016 00:35:22 -0800 (PST), kameleonsql@gmail.com wrote:
> 
> > mamy mały problem z szyfrowaniem plików JPK używając SecureBox'a (Delphi 2010).
> 
> Mały? Na pewno? ;-)
> 
> > Kod był zlecony na zewnątrz firmy (niestety programista, który to robił 
> > jest nieosiągalny ...) i kurcze dopiero teraz się okazało, że  jest błąd w 
> > szyfrowaniu (nikt nie wie dlaczego dopiero teraz :( to wyszło, ale cóż 
> > się zdarza).
> 
> Czy dobrze mi się wydaje, że sprzedawałeś ten kod na tutejszej grupie?
> 
> > Generalnie problem polega chyba na implementacji zmiennych bo jak jest 
> 
> Nie mam pojęcia co to jest implementacja zmiennych, ale...
> 
> [...]
> 
> > Szukam kogoś "kumatego" w temacie, co by oczywiście odpłatnie to szybko poprawił ..
> 
> ...mogę Ci zrobić to szyfrowanie, powiedzmy za 8k, wchodzisz?
> 
> -- 
> pozdrawiam
> Roman Tyczka

W sumie kosztowało mnie to trochę więcej, ale mamy całość "swojego" kodu, co jest dla mnie dość ważne.

Pozdrawiam

Ps.

Dzięki za pomoc.
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345487
Author: Roman Tyczka
Date: Sun, 01 Jan 2017 17:54
11 lines
1540 bytes
On Sun, 1 Jan 2017 03:44:17 -0800 (PST), kameleonsql@gmail.com wrote:

> Widzę, że nie próbowałeś tego programować, tak dla przykładu na  to,  że masz podane jak "krowie na rowie" np. to, ze taki typ http://jpk.guru/baza-wiedzy/typy-danych (ten sam typ zdefiniowany 3 raz :)) ... Takich błędów niedomówień jest w całym JPK cała masa.

W przypadku XMLa sama nazwa typu to nie wszystko. Kluczowy jest name space,
a to zupełnie zmienia postać rzeczy. Tak samo nazwane typy w różnych name
space'ach są INNYMI typami.

-- 
pozdrawiam
Roman Tyczka
Re: Szyfrowanie plików JPK z użyciem SecureBox'a
#345489
Author: wloochacz
Date: Wed, 17 May 2017 14:33
12 lines
1670 bytes
W dniu 2016-12-30 o 10:30, Roman Tyczka pisze:
> On Thu, 29 Dec 2016 23:55:43 -0800 (PST), immo wrote:
> 
>>> ...mogę Ci zrobić to szyfrowanie, powiedzmy za 8k, wchodzisz?
>>
>> Jeśli to nie ironia której nie wyłapałem, to właśnie grupa dla osób takich jak ja umarła na dobre :/

> Co to są "osoby takie jak ja"?
Nie takie jak Ty.

-- 
wloochacz
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads