2012-03-22 13 views
1

Lockbox 2の暗号テキストをLockBox 3の暗号テキストに変換する方法はありますか? Delphi 2007で構築されたアプリケーションをDelphi xe2に移行する際、Delphi 2007でLockbox 2 RSA Encryptionアルゴリズムを使用し、Delphi xe2でlockbox 3を使用してUnicodeデータをサポートする予定です。 Xe2がUnicodeデータをサポートしているため、両方で生成される暗号テキストが異なるため、問題に直面しています。そこで、Lockbox 2で生成された暗号文をLockBox 3に変換したいと考えています。Lockbox2の暗号テキストをLockbox3の暗号テキストに変換する

+0

暗号化されたパスワードやその他のデータが保存されていることを前提としています。あなたは秘密鍵を持っていて、解読と再暗号化ができます。その場合、なぜこの質問をしているのですか、秘密鍵を持っていないのですが、パスワードハッシュであり、平文は回復できません。いずれにしても、あなたはすでに答えを知っています。だからここで尋ねる理由は? –

答えて

2

暗号テキストが定義されていないため、基礎となる平文データがAnsiまたはUnicodeであるかどうかを簡単に判断することはできません....したがって、新しい関連プロパティを管理する必要があります。

明らかに、アプリケーションのレイアウトと、このデータが格納されている場所とクライアントのアップグレード方法によって異なりますが、格納されている暗号文に関連付けられた新しいバージョンのフラグが存在する可能性があります。ローカルテーブルにある場合は、PlainTextVersionの新しい列を追加し、暗号文がUnicodeの平文から保存されたことを示すフラグをバージョンに設定します。暗号文を読み込み、この新しいフィールドがUnicdoeフラグと一致しない場合は、Unicode plaintextを使用して復号化および暗号化を行い、暗号文をアップグレードしてから、暗号文を再保存して新しいフラグを設定することができます(または、バージョンをアップグレードして平文が変更されるまで更新する必要があります)。

可能であれば、すべての現在の暗号テキストを一度に自動アップグレードすることをお勧めします。

0

変換するには、Lockbox 2を使用して暗号化テキストを復号化し、Lockbox 3を使用して再暗号化するのが最も簡単です。

私は、Lockbox 2はRSA block type 2パディングの実装を詰め込んだので、Lockbox 2のRSA暗号化は他の誰かのRSA解読と互換性がないということです。以下誤っよう

メッセージアウトロックボックス2のRSA暗号化パッド(ブレークポイントを配置しbiBlock.Fi.IntBuf.pBufのメモリを検査することによって見出される):

message-bytes 0x00 random-padding-bytes 0x02 0x00

例えば埋めた「試験」:(例えばこのworked exampleを見て)

$01C883AC 74 65 73 74 00 D4 50 50 test..PP 
$01C883B4 A7 BO E5 51 7A 4C C2 BC ...QzL.. 
$01C883BC 8C B8 69 8A 97 DF AA 1D ..I..... 
$01C883C4 78 67 1E OE 8B AB 02 00 xg...... 

しかし、それはにパディングする必要があります。

0x00 0x02 random-padding-bytes 0x00 message-bytes

ロックボックス2は、ちょうど(逆にバイトを格納していませんそれ以外の場合は、 "test"というメッセージも反転されます)、または32ビットのリトルエンディアンが反転されます(そうでなければ02 00もスワップされます)。 Lockbox 2を暗号化と復号化の両方に使用する限り、すべてが機能します。

また、Lockbox 2がe.RandomSimplePrime()を呼び出して公開指数eを生成する別のバグに気付きましたが、偶数、つまりRandomSimplePrime()ehのかなりのバグが生成されますか?私はLockbox 2.07だけを見ました。 Lockbox 3は完全な書き換えだったので、これらのバグはありません。

関連する問題