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? (1 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 Go về cài mà dùng rất nhẹ

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


1/ 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 )

2/ Go tạo ra DLL mã máy và một File duy nhất chỉ copy và khai báo API phổ thông trên Windows và sử dụng rất nhanh

3/ Rảnh tôi sẽ viết nhiều ứng dụng trên Go và sẽ có GoCrypto.dll thuần Go dùng chung cho mọi dự án code trên Delphi, C++ và VBA ...........

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
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom