1stPK Posted November 13 Share Posted November 13 sorry for bothering you. I have a project, before opening a program, I require to enter a KEY (first code) the KEY matches the code set in the code (Local $sKey = 'I48fsE2Tcy1s3zRfa0jw') expandcollapse popup#include <MsgBoxConstants.au3> ; Khai báo danh sách các key Global $keyList[100000] $keyList[0] = "I48fsE2Tcy1s3zRfa0jw" ; Key 1 ; Biến toàn cục Global $maxAttempts = 1 ; Số lần nhập sai tối đa Global $lockDuration = 300 ; Thời gian khóa (5 phút), tính bằng giây Global $regPath = "HKCU\Software\MyAutoItApp" ; Đường dẫn trong Registry Global $attemptCount = RegRead($regPath, "AttemptCount") ; Đọc số lần nhập sai từ Registry Global $lockTime = RegRead($regPath, "LockTime") ; Đọc thời gian khóa từ Registry (theo thời gian hệ thống) ; Nếu chưa có dữ liệu trong Registry, đặt giá trị ban đầu cho $attemptCount If @error Then $attemptCount = 0 ; Kiểm tra nếu chương trình đang bị khóa If $attemptCount >= $maxAttempts Then ; Kiểm tra xem thời gian khóa đã hết chưa If Not @error Then Local $currentTime = _NowSeconds() If ($currentTime - $lockTime) < $lockDuration Then Local $remainingTime = $lockDuration - ($currentTime - $lockTime) MsgBox($MB_ICONERROR, "Thông báo", "Bạn đã nhập sai quá nhiều lần. Vui lòng thử lại sau " & Int($remainingTime) & " giây.") Exit Else ; Đặt lại số lần thử và xóa thời gian khóa nếu đã qua 5 phút $attemptCount = 0 RegWrite($regPath, "AttemptCount", "REG_DWORD", $attemptCount) RegDelete($regPath, "LockTime") EndIf EndIf EndIf ; Hàm trả về thời gian hệ thống hiện tại dưới dạng giây Func _NowSeconds() Return @HOUR * 3600 + @MIN * 60 + @SEC EndFunc ; Hàm kiểm tra key nhập vào Func CheckKey() Local $userKey While True $userKey = InputBox("Kiểm tra Key", "Vui lòng nhập key để sử dụng chương trình:", "", "*") ; Kiểm tra nếu người dùng ấn nút Cancel thì thoát chương trình If @error Then MsgBox($MB_ICONERROR, "Thông báo", "Bạn đã hủy. Chương trình sẽ thoát.") Exit EndIf ; Kiểm tra xem người dùng có nhập gì không If $userKey == "" Then MsgBox($MB_ICONERROR, "Thông báo", "Bạn chưa nhập key! Vui lòng nhập key để tiếp tục.") Else ; Nếu người dùng nhập key sai For $i = 0 To UBound($keyList) - 1 If $userKey == $keyList[$i] Then MsgBox($MB_OK, "Thông báo", "Key đúng. Mở chương trình...") ; Đặt lại số lần nhập sai nếu key đúng RegWrite($regPath, "AttemptCount", "REG_DWORD", 0) Return True EndIf Next ; Nếu key sai, đếm số lần nhập sai $attemptCount += 1 MsgBox($MB_ICONERROR, "Thông báo", "Key sai! Bạn còn " & ($maxAttempts - $attemptCount) & " lần thử.") ; Cập nhật số lần nhập sai vào Registry RegWrite($regPath, "AttemptCount", "REG_DWORD", $attemptCount) ; Kiểm tra xem số lần nhập sai đã đạt giới hạn chưa If $attemptCount >= $maxAttempts Then ; Lưu thời gian khóa vào Registry dưới dạng giây RegWrite($regPath, "LockTime", "REG_DWORD", _NowSeconds()) MsgBox($MB_ICONERROR, "Thông báo", "Bạn đã nhập sai quá 1 lần. Chương trình sẽ bị khóa trong 5 phút.") Exit EndIf EndIf WEnd EndFunc ; Gọi hàm kiểm tra key trước khi mở chương trình If Not CheckKey() Then Exit ; Thoát nếu key không đúng EndIf ; ======================= ; Phần code chính bắt đầu từ đây ; ======================= And now I want the first code to be able to recognize the KEY, which I encrypted (the second code) #include <GUIConstantsEx.au3> #include <Crypt.au3> ; Chuỗi cần mã hóa Local $sKey = 'I48fsE2Tcy1s3zRfa0jw' Local $sPassword = 'MySecretPassword' ; Tạo đối tượng AES Local $hAES = _Crypt_Startup() Local $sEncrypted = _Crypt_EncryptData($sKey, $sPassword, $CALG_AES_256) ; Tạo GUI Local $hGUI = GUICreate("Mã hóa AES", 500, 200) ; Tạo ô nhập liệu (Input) để hiển thị mã hóa Local $hInput = GUICtrlCreateInput($sEncrypted, 10, 10, 460, 30) ; Tạo nút để sao chép (optional) Local $hButtonCopy = GUICtrlCreateButton("Sao chép", 10, 50, 100, 30) ; Hiển thị GUI GUISetState(@SW_SHOW, $hGUI) ; Vòng lặp xử lý sự kiện While 1 ; Lắng nghe sự kiện GUI Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $hButtonCopy ; Sao chép nội dung trong ô nhập liệu vào clipboard khi bấm nút ClipPut(GUICtrlRead($hInput)) MsgBox(0, "Thông báo", "Đoạn mã đã được sao chép vào clipboard.") EndSwitch WEnd Link to comment Share on other sites More sharing options...
jchd Posted November 13 Share Posted November 13 Never ever store a key, password, login, ... in clear in a program. Store a strong hash of the value, let user enter value, compute its hash and compare hashes. SOLVE-SMART 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now