Sample code for 30+ languages & platforms
DataFlex

Manually Duplicate SetSecretKeyViaPassword

Demonstrates how to duplicate the password string to binary secret key computation of SetSecretKeyViaPassword.

This is a cryptographically weak way of generating a secret key from a password. The SetSecretKeyViaPassword method is deprecated and should not be used.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Handle hoCrypt
    String sPassword
    Handle hoSb
    Boolean iSuccess
    String sPasswordBase64
    String sTemp1

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt
    If (Not(IsComObjectCreated(hoCrypt))) Begin
        Send CreateComObject of hoCrypt
    End

    // The password string is transformed to a binary secret key by computing the 
    // MD5 digest (of the utf-8 password) to obtain 16 bytes.  
    // If the KeyLength is greater than 16 bytes, then the MD5 digest of the Base64 encoding 
    // of the utf-8 password is added.  A max of 32 bytes of key material is generated, and 
    // this is truncated to the actual KeyLength required.

    Set ComCryptAlgorithm Of hoCrypt To "aes"
    Set ComKeyLength Of hoCrypt To 256

    Move "this is my password" To sPassword
    Send ComSetSecretKeyViaPassword To hoCrypt sPassword

    // Examine the resulting SecretKey in hex:
    Get ComGetEncodedKey Of hoCrypt "hex" To sTemp1
    Showln "Computed Secret Key = " sTemp1

    // Now perform the same computation manually:
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSb
    If (Not(IsComObjectCreated(hoSb))) Begin
        Send CreateComObject of hoSb
    End

    Set ComHashAlgorithm Of hoCrypt To "md5"
    Set ComCharset Of hoCrypt To "utf-8"
    Set ComEncodingMode Of hoCrypt To "hex"
    Get ComHashStringENC Of hoCrypt sPassword To sTemp1
    Get ComAppend Of hoSb sTemp1 To iSuccess

    Get ComEncodeString Of hoCrypt sPassword "utf-8" "base64" To sPasswordBase64
    Get ComHashStringENC Of hoCrypt sPasswordBase64 To sTemp1
    Get ComAppend Of hoSb sTemp1 To iSuccess

    Get ComGetAsString Of hoSb To sTemp1
    Showln "Manually Computed = " sTemp1

    // The output is:
    // Computed Secret Key = 210D53992DFF432EC1B1A9698AF9DA16C7E90518F90E24828F78EC9E0A413B36
    // Manually Computed = 210D53992DFF432EC1B1A9698AF9DA16C7E90518F90E24828F78EC9E0A413B36


End_Procedure