私は考えOpenSSLに行く。
PHPは実際にそれを試していませんが、PHPを十分にサポートしているようです。 たとえば、the manualとan example hereのようになります。
Delphiは、私がここで何度も言及したものを使用して、少しの作業でOpenSSLとうまく機能するようにすることができます:http://www.disi.unige.it/person/FerranteM/delphiopenssl/。そのページの良い例もあります。そしてIndy OpenSSLのインポートを見てみましょう。
ない特定のコンポーネントが、間違いなく自由に、柔軟かつ自分自身を撮影のための完全な可能性と、セキュリティ面では、
EDIT :-)足に:デルファイのために
私はEVP_Seal *関数を使用して検討しますあなたはthis SO answerにlibeay32.pasファイルの私のバージョンを見つけることができます。 Indyは実際のEVP_関数の多くを実装したり実装したりしないので、関数宣言や他のいくつかのルーチンをインポートする必要があります。
PHPの場合this linkは正しい対応です。ボーナスとして
、このあなたEVP_Sealを使用する方法のアイデアを与える必要があります*もの(非テスト):無料
function EVPSeal(ASource: TBytes; const APublicKey: PEVP_PKEY; out Key: TBytes; out IV: TBytes): TBytes;
var
cipher: PEVP_CIPHER;
ctx: EVP_CIPHER_CTX;
buf: TBytes;
block_size, buf_start, out_len, keysize: integer;
ek: array[0..0] of PByte;
ekl: array[0..0] of integer;
pubk: array[0..0] of PEVP_PKEY;
begin
keysize := EVP_PKEY_size(APublicKey);
cipher := EVP_aes_256_cbc;
SetLength(IV, EVP_MAX_IV_LENGTH);
SetLength(Key, keysize);
ek[0] := @Key[0];
pubk[0] := APublicKey;
buf_start := 0;
EVP_CIPHER_CTX_init(@ctx);
try
EVP_SealInit(@ctx, cipher, @ek[0], @ekl, @IV[0], @pubk[0], 1);
block_size := EVP_CIPHER_CTX_block_size(@ctx);
SetLength(buf, Length(ASource) + block_size);
SetLength(Key, ekl[0]);
EVP_SealUpdate(@ctx, @buf[buf_start], out_len, @ASource[0], Length(ASource));
Inc(buf_start, out_len);
EVP_SealFinal(@ctx, @buf[buf_start], out_len);
Inc(buf_start, out_len);
SetLength(buf, buf_start);
result := buf;
finally
EVP_CIPHER_CTX_cleanup(@ctx);
end;
end;
グッド暗号は、ほとんど意味がない - それはスキルのかなり多くが必要ですプログラミング、セキュリティ、数学の両方で –
通常、RSAなどを使用してファイル全体を暗号化することはありません。なぜなら、通常は遅いからです。非対称鍵で使用される鍵を暗号化するのではなく、対称アルゴリズムで暗号化します。あなたが正しく実装された標準アルゴリズムを使用する限り、データはPHPとDelphiの両方から使用可能になります。 LockBox 3 IMHOは良いライブラリではありません。 –
@ EugeneMayevski'EldoSCorp:あなたはSecureBlackboxのために私に与えることができる素晴らしい割引クーポンを持っていますか? :) – TheDude