我能夠找到兩個Bcrypt庫,可以爲Windows編譯,但我很難在Delphi XE8中爲Android編譯它們。用於delphi XE8的多設備Bcrypt庫
第一個是https://github.com/chinshou/bcrypt-for-delphi,它不需要爲Windows編譯任何修改。
對於第二個https://github.com/PonyPC/BCrypt-for-delphi-lazarus-fpc我不得不做出的checkPassword功能一些小的調整,以獲得相同的結果,因爲它是FreePascal的具體:
function checkPassword(const Str: string; const Hash: ansistring): boolean;
var
RegexObj: TRegEx;
match : TMatch;
Salt : String;
begin
RegexObj := TRegEx.Create('^\$2a\$10\$([\./0-9A-Za-z]{22})',[roIgnoreCase]);
match := RegexObj.Match(Hash);
if match.Success then
begin
Salt := Copy(match.Value,8,22);
Result := HashPassword(Str, Salt) = Hash;
end
else
begin
Result := False;
end;
end;
從贏改變平臺Android上的第一個節目後很多錯誤,因爲它依賴於ComObj,Windows和ActiveX。將RegExpr替換爲RegularExpressions和Type後的第二個僅顯示changes in the String variable產生的衝突。代碼使用AnsiString,AnsiChar,我不能用String和Char替換它,因爲它會影響散列函數。
我錯過了什麼?我應該做些什麼其他修改來替換陳舊的AnsiString和AnsiChar聲明,從而允許爲Android編譯代碼?
如果需要的ActiveX,它***不會***爲Android工作或任何其他平臺。 ActiveX僅限於Windows。與另一個相同,你不能指望用'String'來簡單地替換'AnsiChar',並期望它甚至可以在Windows中工作。你最好找到一個不同的庫,比如LockBox 10. –
LockBox 10是多平臺的,支持Blowfish:https://github.com/TurboPack/LockBox –
我提到的所有庫都只是windows而已只有ActiveX,但是代碼的某些部分可以用FMX函數替換,這是我試圖用第二個更兼容的庫實現的。我從來沒有希望這個代碼能夠通過簡單地替換字符串聲明來工作,你從哪裏得到這個想法?至於LockBox我會給它一個鏡頭,它看起來非常有前途。 – Roman