BCrypt API của Windows: Có nên dùng làm nền tảng bảo mật tái sử dụng cho nhiều ngôn ngữ lập trình? (2 người xem)

Người dùng đang xem chủ đề này

  • Tôi tuân thủ nội quy khi đăng bài

    phuongnam366377

    Thành viên thường trực
    Tham gia
    25/10/19
    Bài viết
    258
    Được thích
    232
    Tôi đang nâng cấp và viết tiếp chủ đề sau theo Puligin.dll và có liên quan File Server khi vận chuyển đến và đi qua Internet ( Ip,Port )

    làm sao an toàn , hiệu quả, bảo mật tốt và xác thực vvv


    Vậy tách ra chủ đề này keo ChatGPT viết bài sau bàn luận xem nên như thế nào là phù hợp vào tốt khi phát triển tiếp dự án code an toàn và bảo mật

    Trên GPE này có nhiều thành viên biết nhiều ngôn ngữ lập trình mời tham gia bàn luận chủ đề này ... ChatGPT viết bài như sau

    BCrypt API của Windows: Có nên dùng làm nền tảng bảo mật tái sử dụng cho nhiều ngôn ngữ lập trình?

    Windows đã có sẵn BCrypt / CNG với khá nhiều tính năng mạnh như:

    • AES / AES-GCM
    • SHA-256 / SHA-512
    • HMAC
    • PBKDF2
    • RNG an toàn
    • RSA / ECC (một phần qua CNG)
    Câu hỏi đặt ra là:

    Có nên dùng BCrypt làm Security Core dùng chung?​

    Ví dụ viết lớp lõi bằng C++ DLL, sau đó tái sử dụng cho:

    • C++
    • C++Builder
    • Delphi
    • C# / .NET
    • VBA
    • Python (ctypes / cffi)
    • PowerShell
    • ngôn ngữ khác gọi DLL/API

    Một số chủ đề mong mọi người cùng trao đổi​

    1. So với thư viện ngoài như OpenSSL / libsodium thì BCrypt có ưu nhược điểm gì?​

    • Native Windows
    • Không cần ship DLL ngoài
    • Hay bị phụ thuộc Windows ecosystem?

    2. Có phù hợp để viết​

    Ví dụ export:

    AES_Encrypt_File
    AES_Decrypt_File
    SHA256_File
    Random_Bytes
    Password_Hash
    Password_Verify

    Rồi ngôn ngữ khác chỉ gọi lại.


    3. Trải nghiệm thực tế khi dùng từ các ngôn ngữ khác nhau​

    • C++ dùng trực tiếp WinAPI thấy ổn không?
    • C++ Builder import header có khó không?
    • Delphi declare external ra sao cho gọn?
    • C# dùng P/Invoke có ổn định không?
    • Python gọi DLL hiệu năng thế nào?

    4. Những khó khăn khi dùng BCrypt​

    • API dài và nhiều handle
    • Quản lý buffer khó
    • Unicode / ANSI
    • Cleanup tài nguyên
    • Error code khó đọc
    • Tài liệu khó tiếp cận?

    5. Nếu bắt đầu project mới hôm nay, bạn chọn gì?​

    • BCrypt
    • OpenSSL
    • libsodium
    • .NET crypto classes
    • Tự viết wrapper riêng

    Góc nhìn cá nhân​

    Mình thấy với ứng dụng chạy chủ yếu trên Windows, BCrypt khá đáng quan tâm vì:

    • Có sẵn trong hệ điều hành
    • Chính chủ Microsoft
    • Hiệu năng tốt
    • Phù hợp build security layer dùng chung nhiều ngôn ngữ
    Nhưng muốn dùng lâu dài có lẽ cần wrapper tốt để đơn giản hóa API.


    Mời chia sẻ kinh nghiệm thực tế​

    Đặc biệt anh em đang code bằng:

    • C++
    • C++Builder
    • Delphi
    • C#
    • Python
    • VBA
    … vào chia sẻ góc nhìn, kinh nghiệm production, lỗi từng gặp, hoặc hướng triển khai tối ưu.

    Tham khảo

    tiêu đề bcrypt.h​


     
    Lần chỉnh sửa cuối:
    bài này nếu chưa có AI thì quá khó ... còn có ChatGPT rồi thì dựa vào

    tiêu đề bcrypt.h viết các hàm Wrapper cho nó quá đơn giản khi sử dụng C++ / CBuilder viết API​


    chỉ là đâu đó họ hay hơi tí hở ra vặn với vẹo và cho mình có học hành code két trường lớp và câu từ thuật ngữ chuẩn mực ( Hàm lâm )

    nên úp lên đây xem sao thôi

    Tôi viết hai ngày trên C++ Builder cơ bản xong

    gợi ý cho ai đó tò mò tham khảo nguồn


    xem nguồn trên có trên 400 unit và trên 125.000 dòng mã ... tim cái cần lấy và chỉ lấy cái cốt lõi xong dựa vào đó mà viết là xong

    còn tây nó viết nguồn mở mà không mở vì thiếu nhiều Unit lệ thuộc nên tải về toàn RÁC vá RÁC nên mở mà không bao giờ mở

    nhưng thực tế nó đang mở banh ra hết quan trong có biết cần cái gì mà lấy còn cái gì không cần thì chuyển vào sọt RÁC
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Tìm một số tài liệu và nguồn mở hầu hết họ sử tái sử dụng bcrypt.h vì chuẩn và an toàn bên cạnh đó sử dụng của Google mà cụ thể có sẳn trên Golang

    Tò mò ngày qua cài Golang hôm nay viết tạm ổn Demo một thư viện trên Golang ... có lẽ ai đó nên học golang nó chạy rất nhanh và code cực dễ

    keo ChatGPT nó chỉ cho vài giờ biết viết tạm keo một thư viện vài chục hàm OK .... xem hình cài hôm qua nay viết cả đống hàm

    tận dụng các hàm vốn có trên Go cho các ứng dụng đa nên tảng

    1776841131854.png
     
    Upvote 0
    1776910561967.png

    Mới viết xong cái này Go có sẳn chỉ Call quá nhanh và an toàn cho mã hoá Token chuẩn Google

    đã Wrapper trên 100 hàm API chuẩn của Go vào một file xong cần chỉ Call

    xong cái này viết các API khác cho Google Sheet, Google Driver +++++++++++ cho các dịch vụ Google vì Go là con của Google mà nên êm ái
     
    Upvote 0
    Wrapper Một Module này đủ dùng cho Http

    Mã:
    ' ==========================================
    ' HTTP API
    ' ==========================================
    Option Explicit
    
    Private Declare PtrSafe Function HttpGet Lib "GoToolkit.dll" (ByVal sUrl As String) As LongPtr
    Private Declare PtrSafe Function HttpGetWithHeader Lib "GoToolkit.dll" (ByVal sUrl As String, ByVal sKey As String, ByVal sVal As String) As LongPtr
    Private Declare PtrSafe Function HttpPostJSON Lib "GoToolkit.dll" (ByVal sUrl As String, ByVal sJson As String) As LongPtr
    Private Declare PtrSafe Function HttpPostForm Lib "GoToolkit.dll" (ByVal sUrl As String, ByVal sForm As String) As LongPtr
    Private Declare PtrSafe Function HttpPut Lib "GoToolkit.dll" (ByVal sUrl As String, ByVal sJson As String) As LongPtr
    Private Declare PtrSafe Function HttpPatch Lib "GoToolkit.dll" (ByVal sUrl As String, ByVal sJson As String) As LongPtr
    Private Declare PtrSafe Function HttpDelete Lib "GoToolkit.dll" (ByVal sUrl As String) As LongPtr
    Private Declare PtrSafe Function HttpGetStatusCode Lib "GoToolkit.dll" (ByVal sUrl As String) As Long
    Private Declare PtrSafe Function HttpDownloadFile Lib "GoToolkit.dll" (ByVal sUrl As String, ByVal sDst As String) As Long
    Private Declare PtrSafe Function HttpSetTimeout Lib "GoToolkit.dll" (ByVal nSec As Long) As Long
    Private Declare PtrSafe Function JsonGetValue Lib "GoToolkit.dll" (ByVal sJson As String, ByVal sKey As String) As LongPtr
    Private Declare PtrSafe Function JsonBuildObject Lib "GoToolkit.dll" (ByVal sKV As String) As LongPtr
    
    Sub TestHttp()
        Dim pRet    As LongPtr
        Dim sResp   As String
        Dim nRet    As Long
    
        ' Set timeout 10 giây
        HttpSetTimeout 10
    
        Debug.Print "=== HTTP Test ==="
        Debug.Print "---"
    
        ' ==========================================
        ' 1. GET don gi?n
        ' ==========================================
        Debug.Print "1. GET Request:"
        pRet = HttpGet("https://httpbin.org/get")
        sResp = PtrToString_API.PtrToString(pRet)
        PtrToString_API.FreeString pRet: pRet = 0
        Debug.Print Left(sResp, 200) & "..."
        Debug.Print "---"
    
        ' ==========================================
        ' 2. Status Code
        ' ==========================================
        Debug.Print "2. Status Codes:"
        Debug.Print "httpbin.org/get    : " & HttpGetStatusCode("https://httpbin.org/get")
        Debug.Print "httpbin.org/status/404 : " & HttpGetStatusCode("https://httpbin.org/status/404")
        Debug.Print "---"
    
        ' ==========================================
        ' 3. POST JSON
        ' ==========================================
        Debug.Print "3. POST JSON:"
        pRet = HttpPostJSON("https://httpbin.org/post", "{""name"":""VBA"",""version"":""64bit""}")
        sResp = PtrToString_API.PtrToString(pRet)
        PtrToString_API.FreeString pRet: pRet = 0
        Debug.Print Left(sResp, 200) & "..."
        Debug.Print "---"
    
        ' ==========================================
        ' 4. POST Form
        ' ==========================================
        Debug.Print "4. POST Form:"
        pRet = HttpPostForm("https://httpbin.org/post", "username=VBAUser&password=12345")
        sResp = PtrToString_API.PtrToString(pRet)
        PtrToString_API.FreeString pRet: pRet = 0
        Debug.Print Left(sResp, 200) & "..."
        Debug.Print "---"
    
        ' ==========================================
        ' 5. JSON Helper - Build Object
        ' ==========================================
        Debug.Print "5. JsonBuildObject:"
        pRet = JsonBuildObject("name=KieuManh|city=HCMC|lang=Go")
        sResp = PtrToString_API.PtrToString(pRet)
        PtrToString_API.FreeString pRet: pRet = 0
        Debug.Print "JSON : " & sResp
        Debug.Print "---"
    
        ' ==========================================
        ' 6. JSON Helper - Get Value
        ' ==========================================
        Debug.Print "6. JsonGetValue:"
        pRet = JsonGetValue("{""name"":""VBA"",""version"":""64bit"",""year"":2026}", "name")
        sResp = PtrToString_API.PtrToString(pRet)
        PtrToString_API.FreeString pRet: pRet = 0
        Debug.Print "name  : " & sResp
    
        pRet = JsonGetValue("{""name"":""VBA"",""version"":""64bit"",""year"":2026}", "year")
        sResp = PtrToString_API.PtrToString(pRet)
        PtrToString_API.FreeString pRet: pRet = 0
        Debug.Print "year  : " & sResp
        Debug.Print "---"
    
        ' ==========================================
        ' 7. Download File
        ' ==========================================
        Debug.Print "7. Download File:"
        nRet = HttpDownloadFile("https://httpbin.org/image/png", "D:\Golang_Libraries\downloaded.png")
        Debug.Print "Download PNG : " & IIf(nRet = 1, "OK -> downloaded.png", "FAIL")
    
        Debug.Print "=== Done ==="
    End Sub

    Kết quả sẽ như sau

    Mã:
    === HTTP Test ===
    ---
    1. GET Request:
    {
      "args": {},
      "headers": {
        "Accept-Encoding": "gzip",
        "Host": "httpbin.org",
        "User-Agent": "Go-http-client/1.1",
        "X-Amzn-Trace-Id": "Root=1-69e98609-5ba099af6d42517743aafd18"
     ...
    ---
    2. Status Codes:
    httpbin.org/get    : 200
    httpbin.org/status/404 : 404
    ---
    3. POST JSON:
    {
      "args": {},
      "data": "{\"name\":\"VBA\",\"version\":\"64bit\"}",
      "files": {},
      "form": {},
      "headers": {
        "Accept-Encoding": "gzip",
        "Content-Length": "32",
        "Content-Type": "...
    ---
    4. POST Form:
    {
      "args": {},
      "data": "",
      "files": {},
      "form": {
        "password": "12345",
        "username": "VBAUser"
      },
      "headers": {
        "Accept-Encoding": "gzip",
        "Content-Length": "31",
        "C...
    ---
    5. JsonBuildObject:
    JSON : {"city":"HCMC","lang":"Go","name":"KieuManh"}
    ---
    6. JsonGetValue:
    name  : VBA
    year  : 2026
    ---
    7. Download File:
    Download PNG : OK -> downloaded.png
    === Done ===

    quá đơn giản Go viết cho sẳn chỉ Call không còn lệ thuộc Http COM của Ms nữa

    Http của Ms nhiều khi khó chịu không tưởng viết code thử OK khi dùng lúc lỗi lúc không có lúc Crash rất khó chịu

    Thời đại AI rồi mà có người còn cố ÔM COM của Ms viết Http trên C++ nữa thì thật là vãi lắm
     
    Lần chỉnh sửa cuối:
    Upvote 0
    xem ra Go rất hay ho và viết mã rất dễ tính thời gian thì chỉ khoãng 1 ngày cài và viết là có trên 100 hàm API Wrapper các hàm cơ bản của Go cho VBA xong .............. rất nhanh

    Go có hết các hàm cơ bản cho ai đó muốn sử dụng nó và các hàm mã hoá chuẩn quốc tế thay vì phải lệ thuộc vào Windows thì tái sử dụng của Go cho đa nền tảng rất tuyệt vời và viết sử dụng cho các dịch vụ Google quá tốt

    ai thích tải nó về cài mà dùng rất nhẹ

    công cụ hổ trợ viết mã


    Khó khăn hỏi AI con nào tuỳ thích còn Tôi dùng ChatGPT và Copilot Free hỏi loanh quanh chút cơ bản viết trên 100 hàm API thành công ( nếu tính thời gian cài và học khoãng 1 ngày xong )

    Trên C++ Builder tôi mất gần một tuần mới biết viết cơ bản còn Go cả cài và cùng chatGPT dò 1 ngày xong trên 100 hàm API
     
    Upvote 0

    Bài viết mới nhất

    Back
    Top Bottom