PBFunc usando las operaciones de cifrado y descifrado a cabo en el secreto de Estado SM4 en Powerbuilder

uso PBFunc n_pbfunc_cryp de los objetos puede ser fácilmente SM4 cifrado y operación de descifrado, en el que el vector no requiere BCE IV, otros modos necesitan IV

Descargar Código: https://download.csdn.net/download/my_aa/12309197

  • SM4 cifrado:

 

1  // disponible http://aks.jd.com/tools/sec/ comparación resultado 
2  Cadena ls_data
 . 3 ls_data = sle_1.text // datos a ser cifrados 
. 4  Cuerda ls_key 
 . 5 ls_key = sle_key.Text // 128 bits (16 . 8 *) 
. 6  cuerdas ls_IV
 . 7  // el modo CBC requiere vectores iv, el modo de BCE, se ignora el valor del parámetro 
. 8 ls_IV = " 8a6c4ddd8a6c4ddd " // IV 
. 9  
10  n_pbfunc_cryp lnv_cryp
 . 11  // formato de cifrado contenido proporcionado 
12 es  de cadena ls_out_code
 13 esRb_result_base64 la IF. El comprueba la continuación
 14   ls_out_code = lnv_cryp.HASH_RESULT_BASE64 // el codificador Base64 
15  Else
 16   ls_out_code = lnv_cryp.HASH_RESULT_HEX // 16 hex 
. 17  End la IF
 18 es  // datos que codifican formatos 
. 19  largo ll_dataEndCode
 20 es el IF rb_utf8. El comprueba el entonces // UTF 8 codificador 
21 es   ll_dataEndCode = lnv_cryp.DataEncode_UTF8
 22 es  el otro 
23 está   ll_dataEndCode = lnv_cryp.DataEncode_DEFAULT
 24  Finalizar la IF
 25  // selección de modo
26 es  Cadena ls_CipherMode
 27 ls_CipherMode = ddlb_chipermode.Text
 28  largo ll_CipherMode
 29 la IF ls_CipherMode = " una BCE " la continuación
 30   ll_CipherMode = lnv_cryp.CipherMode_ECB / * un modo ECB * / 
31 es  el otro 
32   ll_CipherMode lnv_cryp.CipherMode_CBC = / * el modo CBC * / 
33 es  Terminar la IF
 34 es  // bits de longitud de clave, un personaje es de 8 bits, es decir 16 caracteres 128, 192 de 24 caracteres, 32 caracteres 256 
35  largo ll_keyLen
 36 la IF ddlb_keylen.Text = " 128 "Entonces
 37   ll_keyLen = 128 
38 elseif ddlb_keylen.Text = " 192 " Entonces
 39   ll_keyLen = 192 
40 elseif ddlb_keylen.Text = " 256 " Entonces
 41   ll_keyLen = 256 
42  más 
43   ll_keyLen = 128 
44  END IF
 45  cadena ls_out
 46  // 进行加密
47 SI lnv_cryp.of_sm4_encrypt (y
 48    ll_CipherMode,   / * 模式* / y
 49   lnv_cryp.PaddingMode_PKCS5, / * modo de relleno PKCS5 * / y
 50    ll_keyLen, / * longitud de clave de bits * / Y
 51 es    ls_data, ls_key, ls_IV, y
 52 es    ll_dataEndCode, y
 53 se    ls_out_code, / * contenido codificado encriptada * / y
 54    ls_out) la continuación
 55   mle_1.Text = ls_out // encriptada contenido 
56 es  el otro 
57 está   la messageBox ( "" , " cifrado no " )
 58  End la IF
 59  
  • descifrado SM4
1  // disponible http://tool.chacuo.net/cryptaes resultado de comparación 
2  Cadena ls_data
 . 3 ls_data = mle_1.Text // para descifrar los datos 
. 4  
. 5  Cadena ls_key 
 . 6 ls_key = sle_key.Text // 128 bits (16 * 8 ) 
. 7  
. 8  cadena ls_IV
 . 9  // el modo CBC requiere vectores IV, modo ECB ignora este valor de parámetro 
10 ls_IV = " 8a6c4ddd8a6c4ddd " // IV 
. 11  
12 es  
13 es  lnv_cryp n_pbfunc_cryp
 14  
15  // contenido formato de cifrado proporcionado 
16  cadenals_out_code
 17 IF rb_result_base64. comprobado Entonces
 18      ls_out_code = lnv_cryp.HASH_RESULT_BASE64 // Base64编码
19  Else
 20      ls_out_code = lnv_cryp.HASH_RESULT_HEX // 16进制
21  END IF
 22  
23  largo ll_dataEndCode
 24 IF rb_utf8. comprobado entonces // UTF-8编码
25      ll_dataEndCode = lnv_cryp.DataEncode_UTF8
 26  más 
27      ll_dataEndCode = lnv_cryp.DataEncode_DEFAULT
 28  END IF
 29  
30 // el selector de modo 
31 es  de cadena ls_CipherMode
 32 ls_CipherMode = ddlb_chipermode.Text
 33 es  
34 es  largo ll_CipherMode
 35 la IF ls_CipherMode = " una BCE " la continuación
 36      ll_CipherMode = lnv_cryp.CipherMode_ECB / * un modo ECB * / 
37 [  el otro 
38 es      ll_CipherMode lnv_cryp.CipherMode_CBC = / * el modo CBC * / 
39  End la IF
 40  
41 es  // bits de la clave de longitud, un 8 bits caracteres, 128 que es de 16 caracteres, 24 caracteres 192, 256 de 32 caracteres 
42 es  largo ll_keyLen
 43 se= Ddlb_keylen.Text la SI " 128 " la continuación
 44 es      ll_keyLen = 128 
45 elseif ddlb_keylen.Text = " 192 " la continuación
 46 es      ll_keyLen = 192 
47 elseif ddlb_keylen.Text = " 256 " la continuación
 48      ll_keyLen = 256 
49  el otro 
50      ll_keyLen = 128 
51 es  poner fin a la IF
 52 es  
53 es ls_out BLOB // contenido descifrado 
54 es  largo ll_outLen // longitud del contenido (número de bytes) descifrada
 55  //El siguiente se descifra 
56 es el IF lnv_cryp.of_sm4_decrypt (y
 57 es          ll_CipherMode,   / * modo * / y
 58          lnv_cryp.PaddingMode_PKCS5, / * modo de relleno PKCS5 * / y
 59          ll_keyLen, / * longitud de clave de bits * / y
 60          ls_data, ls_key, ls_IV , y
 61 es          ls_out_code, / * codificador contenido cifrado * / y
 62 es          ls_out, ll_outLen) el entonces
 63 es      el IF rb_utf8. la comprueba el entonces // UTF-codificado. 8 
64          sle_2.Text =lnv_cryp.of_utf8ToGbk (ls_out, ll_outLen)
 65      más 
66          sle_2.Text = cadena (ls_out)
 67      END IF
 68  más 
69      de mensaje ( "" , " 解密失败" )
 70 END IF

botón SM4 de referencia particular a la codificación y descodificación de la w_encrypt código

Descargar: https: //download.csdn.net/download/my_aa/12309197

Supongo que te gusta

Origin www.cnblogs.com/wangxianjin/p/12655351.html
Recomendado
Clasificación