1

202 バイトのキーがあり、それを使用してバイナリ ファイルを復号化します。

StringSource keyStr( key, Z3_KEY_LENGTH, true );
AutoSeededRandomPool rng;
ECIES<ECP>::Decryptor ellipticalEnc( keyStr );
unsigned char *tmpBuffer( new unsigned char[ src.Size() ] );
DecodingResult dr = ellipticalEnc.Decrypt( rng, src.Data(), src.Size(), tmpBuffer );

私はこれに jsafejce を使用しようとしました:

PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(key);
KeyFactory factory = KeyFactory.getInstance("EC", "JsafeJCE");
PrivateKey privateKey = factory.generatePrivate(privKeySpec);
Cipher eciesDecrypter = Cipher.getInstance("ECIES/SHA1/HMACSHA1", "JsafeJCE");

Cipher eciesDecrypter = Cipher.getInstance("ECIESwithXOR/SHA1/HMACSHA1", "JsafeJCE");

しかし、最初にブロックエラーが発生し、16 で割る必要があり、2 番目に mac チェックエラーが発生します。

誰か提案はありますか?

4

2 に答える 2

1

コードで何をしようとしているのか、よくわかりません。いくつかの質問に答えてみます。


ECIES ECP CryptoPP を JAVA に変換する

Crypto++ の要点を理解するには、次のように困難です。

// Assuming your key was DER Encoded
byte key[Z3_KEY_LENGTH] = ...;

ECIES<ECP>::Decryptor decryptor;
decryptor.BERDecodePublicKey(ArraySource(key, sizeof(key)).Ref(), false, sizeof(key));

const ECPPoint& point = decryptor.GetPublicElement();
const Integer& x = point.x;
const Integer& y = point.y;

キーが DER エンコードされていない場合は、Crypto++ wiki のKeys and Formatsを参照してください。Elliptic Curve Integrated Encryption Schemeに関する wiki ページもあります。

Java 7 はECPoint クラスを提供し、X と Y 座標を取ります。


> ECIES<ECP>::Decryptor ellipticalEnc( keyStr );
> unsigned char *tmpBuffer( new unsigned char[ src.Size() ] );
> DecodingResult dr = ellipticalEnc.Decrypt( rng, src.Data(), src.Size(), tmpBuffer );

これは正しくないように見えますが、十分なコードが示されていません。

size_t maxLength = decryptor.MaxPlaintextLength( src.Size() );
unsigned char *tmpBuffer = new unsigned char[ maxLength ];

DecodingResult dr = ellipticalEnc.Decrypt( rng, src.Data(), src.Size(), tmpBuffer );
if( !result.isValidCoding )
    throw runtime_error("failed to decrypt cipher text");

unsigned char *buffer = new unsigned char[ result.messageLength ];
std::cpy(tmpBuffer, buffer, result.messageLength);
于 2013-10-02T08:46:56.130 に答える
0

キーの最後に空のバイトを追加して、208バイトの長さにしようとしましたか?これでブロックサイズエラーが修正される可能性があります。

于 2012-09-27T20:54:46.360 に答える