PowerBasic 生成AES密码 32位

#INCLUDE ONCE "BCrypt.inc"

MACRO ALG_ID = DWORD

'//-----------------------------------------------------------------------
'// 生成AES密码 32位
'//-----------------------------------------------------------------------
FUNCTION AES_ComputeHash(BYVAL buf AS STRING, BYVAL pass AS STRING, BYVAL Algid AS ALG_ID) AS STRING
    LOCAL i AS LONG
    LOCAL hCryptProv AS DWORD
    LOCAL hCryptHash AS DWORD
    LOCAL hCryptKey AS DWORD
    LOCAL bRet AS LONG
    LOCAL pData AS BYTE PTR
    LOCAL aes AS STRING
    LOCAL dwDataLength, dwBufferLength, dwKeyLength AS DWORD

    '// 获得指定CSP的密钥容器的句柄
    bRet = CryptAcquireContext(hCryptProv, BYVAL %NULL, BYVAL %NULL, %PROV_RSA_AES, %CRYPT_VERIFYCONTEXT)
    IF(bRet<>1) THEN
       FUNCTION = ""
       EXIT FUNCTION
    END IF

    '//创建一个HASH对象, 指定HASH算法
    bRet = CryptCreateHash(hCryptProv, %CALG_MD5, BYVAL %NULL, 0, hCryptHash)
    IF(bRet<>1) THEN
       FUNCTION = ""
       EXIT FUNCTION
    END IF
    '//计算HASH数据
    bRet = CryptHashData(hCryptHash, BYVAL STRPTR(pass), LEN(pass), 0)
    IF(bRet<>1) THEN
       FUNCTION = ""
       EXIT FUNCTION
    END IF

    '//生成加密hCryptKey
    SELECT CASE Algid
        CASE %CALG_AES_128
            bRet = CryptDeriveKey(hCryptProv, %CALG_AES_128, hCryptHash, %CRYPT_EXPORTABLE, hCryptKey)      '16 * 8
            IF bRet>0 THEN MSGBOX "128"

        CASE %CALG_AES_192
            bRet = CryptDeriveKey(hCryptProv, %CALG_AES_192, hCryptHash, %CRYPT_EXPORTABLE, hCryptKey)      '24 * 8
            IF bRet>0 THEN MSGBOX "192"

        CASE %CALG_AES_256
            bRet = CryptDeriveKey(hCryptProv, %CALG_AES_256, hCryptHash, %CRYPT_EXPORTABLE, hCryptKey)      '32 * 8
            IF bRet>0 THEN MSGBOX "256"

    END SELECT

    pData = STRPTR(buf)
    dwDataLength = LEN(buf)+1
    dwBufferLength = %MAX_PATH

    bRet = CryptEncrypt(hCryptKey, BYVAL %NULL, %TRUE, 0, pData, dwDataLength, dwBufferLength)
    'bRet = CryptDecrypt(hCryptKey, BYVAL %NULL, %TRUE, 0, pData, BYREF dwDataLength)
    FOR i=0 TO dwDataLength-1
        aes = aes + CHR$(@pData[i])
    NEXT i

    IF(hCryptKey>0) THEN CryptDestroyKey(hCryptKey)
    IF(hCryptHash>0) THEN CryptDestroyHash(hCryptHash)
    IF(hCryptProv>0) THEN CryptReleaseContext(hCryptProv, 0)
    FUNCTION = aes
END FUNCTION

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PowerBASIC是一种基于BASIC语言的编程语言。它可以用于开发Windows应用程序,包括使用ListView控件来显示数据列表。以下是使用PowerBASIC创建和使用ListView控件的示例代码: ``` #COMPILE EXE #DIM ALL #INCLUDE "WIN32API.INC" FUNCTION PBMAIN () AS LONG LOCAL hDlg, hList AS DWORD DIALOG NEW 0, "List View Example", , , 200, 200, %WS_OVERLAPPEDWINDOW TO hDlg CONTROL ADD "SysListView32", hDlg, %IDC_LISTVIEW, "", 10, 10, 180, 180, _ %WS_CHILD OR %WS_VISIBLE OR %LVS_REPORT OR %LVS_SINGLESEL ListView_SetExtendedListViewStyle GetDlgItem(hDlg, %IDC_LISTVIEW), _ %LVS_EX_FULLROWSELECT OR %LVS_EX_GRIDLINES ListView_InsertColumn GetDlgItem(hDlg, %IDC_LISTVIEW), 0, "Column 1", 100 ListView_InsertColumn GetDlgItem(hDlg, %IDC_LISTVIEW), 1, "Column 2", 100 ListView_InsertItem GetDlgItem(hDlg, %IDC_LISTVIEW), 0, "Item 1" ListView_SetItemText GetDlgItem(hDlg, %IDC_LISTVIEW), 0, 1, "Value 1" ListView_InsertItem GetDlgItem(hDlg, %IDC_LISTVIEW), 1, "Item 2" ListView_SetItemText GetDlgItem(hDlg, %IDC_LISTVIEW), 1, 1, "Value 2" DIALOG SHOW MODAL hDlg CALL DlgProc END FUNCTION CALLBACK FUNCTION DlgProc() AS LONG SELECT CASE CBMSG CASE %WM_COMMAND IF CBCTL = %IDCANCEL THEN DIALOG END CBHNDL, 0 END IF END SELECT END FUNCTION ``` 这个示例代码创建了一个具有两个列的ListView控件,并在其中插入了两个项目。通过设置`%LVS_REPORT`样式,ListView控件将显示为报表视图,每个项目将显示为一行,每个列将显示为一个数据字段。通过设置`%LVS_EX_FULLROWSELECT`和`%LVS_EX_GRIDLINES`样式,ListView控件将启用整行选择和网格线。可以使用`ListView_InsertItem`和`ListView_SetItemText`函数向ListView控件中插入和设置项目和列的文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值