オブジェクトの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ボタン特定の参照