暗号化と復号化操作を使用してPBFuncは、PowerBuilderから国家機密SM4で実行しました

オブジェクトのPBFunc n_pbfunc_cryp使用が簡単SM4暗号化および復号化演算、ベクトルはECB IVを必要としないことを特徴と、他のモードはIVを必要とすることができます

ダウンロードコード:https://download.csdn.net/download/my_aa/12309197

  • SM4の暗号化:

 

1  // 利用可能http://aks.jd.com/tools/sec/ 比較結果
2  ストリングls_data
 。3 ls_data = sle_1.text // 暗号化すべきデータ
。4  文字列ls_key 
 。5 ls_key = sle_key.Text // 128ビット(16 8 *)
。6  ls_IV
 。7  // CBCモードでは、IV、ECBモードは、パラメータ値が無視されるベクターを必要とする
。8 ls_IV = " 8a6c4ddd8a6c4ddd " // IV 
。9  
10  n_pbfunc_cryp lnv_cryp
 。11の // コンテンツの暗号化フォーマットを設け
12である 文字列ls_out_code
 13でありますRb_result_base64 IF。ザがチェックそして
 14   ls_out_code = lnv_cryp.HASH_RESULT_BASE64 // Base64で符号
15  エルス
 16   ls_out_code = lnv_cryp.HASH_RESULT_HEX // 16進
17  IFエンド
 18は 、// 形式をコードデータ
19  ロングll_dataEndCode
 20は IFのrb_utf8。ザがチェック次に// UTF-を8エンコーダ
21で   ll_dataEndCode = lnv_cryp.DataEncode_UTF8
 22で 
23である   ll_dataEndCode = lnv_cryp.DataEncode_DEFAULT
 24  IFエンド
 25  // モード選択
26は 文字列ls_CipherMode
 27 ls_CipherMode = ddlb_chipermode.Text
 28  ロングll_CipherMode
 29 IF ls_CipherMode = " ECBは、" 次に
 30   ll_CipherMode = lnv_cryp.CipherMode_ECB / * ECBモード* / 
31である 他の
32   ll_CipherMode lnv_cryp.CipherMode_CBC = / * CBCモード* / 
33である IFエンド
 34です // 鍵長ビット、文字が16文字128である8ビット、24文字の192、32文字256で
35  ロングll_keyLen
 36 IF ddlb_keylen.Text = " 128 "次いで
 37   ll_keyLen = 128 
38 ELSEIF ddlb_keylen.Text = " 192 " 、次いで
 39   ll_keyLen = 192 
40 ELSEIF ddlb_keylen.Text = " 256 " 、次いで
 41   ll_keyLen = 256 
42  
43   ll_keyLen = 128 
44  END IF
 45  ls_out
 46  // 进行加密
47 IF lnv_cryp.of_sm4_encrypt(&
 48    ll_CipherMode、   / * 模式* /49   lnv_cryp.PaddingMode_PKCS5、/ * PKCS5充填モード* /50    ll_keyLen、/ * キーのビット長* /51は    ls_data、ls_key、ls_IV、および
 52である    ll_dataEndCode、および
 53である    ls_out_code、/ * 暗号化およびエンコードされたコンテンツ* /54    ls_out)その後、
 55   mle_1.Text = ls_out // 暗号化されたコンテンツ
56は 、他の
57がある   メッセージボックス("" " 暗号化に失敗しました" 58  END IF
 59  
  • SM4解読
1  // 利用可能なhttp://tool.chacuo.net/cryptaes 比較結果
2  ls_data
 。3 ls_data = mle_1.Text // データを復号化する
。4  
。5  文字列ls_key 
 。6 ls_key = sle_key.Text // 128ビット(16 * 8 )
。7  
。8  ls_IV
 。9  // CBCモードはベクトルIVを必要とする、ECBモードでは、このパラメータの値を無視
10 = ls_IV " 8a6c4ddd8a6c4dddは" // IV 
。11  
12であり、 
13は n_pbfunc_cryp lnv_cryp
 14  
15の // コンテンツの暗号化フォーマットを設け
16  文字列ls_out_code
 17 rb_result_base64 IF。確認18      ls_out_code = lnv_cryp.HASH_RESULT_BASE64 // Base64で编码
19  エルス
 20      ls_out_code = lnv_cryp.HASH_RESULT_HEX // 16进制
21  エンドIF
 22  
23  長いll_dataEndCode
 24 rb_utf8 IF。確認後、// UTF-8编码
25      ll_dataEndCode = lnv_cryp.DataEncode_UTF8
 26  
27      ll_dataEndCode = lnv_cryp.DataEncode_DEFAULT
 28  エンドIF
 29  
30 // モードセレクタ
31は、 文字列ls_CipherMode
 32 ls_CipherMode = ddlb_chipermode.Text
 33は 
34である ロングll_CipherMode
 35 IF ls_CipherMode = " ECB " そして
 36      ll_CipherMode = lnv_cryp.CipherMode_ECB / * ECBモード* / 
37 [  
38である      ll_CipherMode lnv_cryp.CipherMode_CBC = / * CBCモード* / 
39  END IF
 40  
41である // 16文字、24文字192で鍵長ビット、8ビット文字、128、32文字の256 
42は ロングll_keyLen
 43のIS= Ddlb_keylen.Text IF " 128 " 次に
 44である      ll_keyLen = 128 
45 ELSEIF ddlb_keylen.Text = " 192 " 次に
 46は      ll_keyLen = 192 
47 ELSEIF ddlb_keylen.Text = " 256 " そして
 48      ll_keyLen = 256 
49  
50      = ll_keyLen 128 
51である END IF
 52は 
53れる BLOBのls_out // 復号化されたコンテンツ
54である ロング ll_outLen // コンテンツ長さ(バイト数)を解読
 55  //以下は、復号化され
ている56 IF lnv_cryp.of_sm4_decrypt(&
 57で          ll_CipherMode、   / * モード* /58          lnv_cryp.PaddingMode_PKCS5、/ * PKCS5充填モード* /59          ll_keyLen、/ * キーのビット長* /60          ls_data、ls_key、ls_IV 、&
 61は          ls_out_code、/ * 暗号化されたコンテンツの符号化* /62は         次いでls_out、ll_outLen)
 63である      IF rb_utf8。チェック次いで// UTFエンコード。8 
64          sle_2.Text =lnv_cryp.of_utf8ToGbk(ls_out、ll_outLen)
 65      、他
66          sle_2.Text = 文字列(ls_out)
 67      END IF
 68  
69      メッセージボックス("" " 解密失败" 70 END IF

コードw_encryptの暗号化および復号化にSM4ボタン特定の参照

ダウンロードします。https://download.csdn.net/download/my_aa/12309197

おすすめ

転載: www.cnblogs.com/wangxianjin/p/12655351.html