私は最近、Delphi 2007からいくつかのコードを取り出し、それをDelphi 2009にアップグレードしました。これは関連性があるかもしれません。Delphi 2007を超えてアップグレードした後に暗号化が機能しないのはなぜですか?
私のコンピュータでコードを実行すると、パスワードの復号化が正しく解読されません。ここにコードがあります。
だから、Seed := GenerateIntFromString('usercode');
// Check if a password already exists
if TableUser.FieldByName('PASSWORD').AsString <> '' then
begin
EncodedPassword := TableUser.FieldByName('PASSWORD').AsString;
DecodedPassword := EncryptDecrypt(EncodedPassword, Seed);
//etc.. And the function
function TLogonForm.EncryptDecrypt(Input: string; Seed: integer) : string;
var
i : integer;
Output : string;
begin
RANDSEED := Seed;
Output := '';
for i := 1 to Length(Input) do
Output := Output + Chr(Ord(Input[i]) XOR (RANDOM(254) + 1));
Result := Output;
end;
私のUSERCODEがTD で、私のパスワードは 'JOEJOE'
暗号化されたパスワードがされている場合:?ìAP?
復号化さpassowrdは次のとおりです。JìEJùE
それは明らかにJOEJOEとして解読する必要があります。私がコードをビルドし、別のユーザーにexeを送信した場合、キッカーはそれをうまく解読します。これは、私のコンピュータではなく、コードで何か間違っているとは信じられません。どうなり得るか?
おそらく関連していない可能性があるため、これは無視できます。あるコンピュータで何かがうまくいくが、もう一方のコンピュータではうまくいかないケースがあるので、私はそれを言います。
しかし、フィルタ
TableUser2.Filter := FilterString;
を設定しようとしたとき、それは私のために正常に動作しますが、他のユーザーがエラーを取得する1場合もあります。
TableUser2:エラー3106:レコードフィルター式でサポートされていない演算子が見つかりました。
同じコードを実行している同じ名前でフィルタリングする場合でも、たぶんデータベースの問題?
あなたが私たちに示したコードは、唯一の壊れたコードではないと思われます。あなたのメソッドEncryptDecryptは、非Unicode DelphiからUnicode Delphiに適切に移植されていません。もちろん、StringとCharは1文字あたりのバイトサイズで、以前はCharあたり2バイトでした。 –
リソース:http://stackoverflow.com/questions/1598211/delphi-conversion-unicode-issues –
私は実際にそれを認識していません。私はちょうどこのコードで作業を始めました。また、暗号化に関する経験は限られています。 Char情報が私にどのように役立つのでしょうか?おかげさまで私はあなたのリンクを持っています。 – Trevor