利用PBFunc在Powerbuilder中进行国密SM4的加密解密操作

利用PBFunc的n_pbfunc_cryp对象可以很方便的进行SM4的加密解密操作,其中ECB不需要向量IV,其它模式需要IV

代码下载地址:https://download.csdn.net/download/my_aa/12309197

SM4加密:

//可用 http://aks.jd.com/tools/sec/ 对比结果
string ls_data
ls_data = sle_1.Text//要加密的数据

string ls_key 
ls_key = sle_key.Text//128位(16 * 8)

string ls_IV
//CBC模式需要向量iv,ECB模式忽略该参数值
ls_IV= "8a6c4ddd8a6c4ddd"//iv


n_pbfunc_cryp lnv_cryp

//设置加密后的内容格式
string ls_out_code
IF rb_result_base64.checked Then
	ls_out_code = lnv_cryp.HASH_RESULT_BASE64//Base64编码
Else
	ls_out_code = lnv_cryp.HASH_RESULT_HEX//16进制
End IF

//数据编码格式
long ll_dataEndCode
IF rb_utf8.checked then//utf-8编码
	ll_dataEndCode = lnv_cryp.DataEncode_UTF8
else
	ll_dataEndCode = lnv_cryp.DataEncode_DEFAULT
End IF

//模式选择
string ls_CipherMode
ls_CipherMode = ddlb_chipermode.Text

long ll_CipherMode
IF ls_CipherMode = "ECB" Then
	ll_CipherMode = lnv_cryp.CipherMode_ECB /*ECB模式*/
else
	ll_CipherMode = lnv_cryp.CipherMode_CBC /*CBC模式*/
End IF

//密钥长度位,一个字符为8位,128即为16个字符,192为24个字符,256为32个字符
long ll_keyLen
IF ddlb_keylen.Text="128" Then
	ll_keyLen = 128
elseIF ddlb_keylen.Text="192" Then
	ll_keyLen = 192
elseIF ddlb_keylen.Text="256" Then
	ll_keyLen = 256
else
	ll_keyLen = 128
End IF

string ls_out
//进行加密
IF lnv_cryp.of_sm4_encrypt(&
		ll_CipherMode,  /*模式*/ &
		lnv_cryp.PaddingMode_PKCS5, /*PKCS5填充方式*/ &
		ll_keyLen, /*密钥位长度*/&
		ls_data,ls_key,ls_IV, &
		ll_dataEndCode,&
		ls_out_code,/*加密后的内容编码*/ &
		ls_out) then
	mle_1.Text = ls_out//加密后内容
else
	messageBox("","加密失败")
End IF


SM4解密

//可用 http://tool.chacuo.net/cryptaes 对比结果
string ls_data
ls_data = mle_1.Text//要解密的数据

string ls_key 
ls_key = sle_key.Text//128位(16 * 8)

string ls_IV
//CBC模式需要向量iv,ECB模式忽略该参数值
ls_IV= "8a6c4ddd8a6c4ddd"//iv


n_pbfunc_cryp lnv_cryp

//设置加密后的内容格式
string ls_out_code
IF rb_result_base64.checked Then
	ls_out_code = lnv_cryp.HASH_RESULT_BASE64//Base64编码
Else
	ls_out_code = lnv_cryp.HASH_RESULT_HEX//16进制
End IF

long ll_dataEndCode
IF rb_utf8.checked then//utf-8编码
	ll_dataEndCode = lnv_cryp.DataEncode_UTF8
else
	ll_dataEndCode = lnv_cryp.DataEncode_DEFAULT
End IF

//模式选择
string ls_CipherMode
ls_CipherMode = ddlb_chipermode.Text

long ll_CipherMode
IF ls_CipherMode = "ECB" Then
	ll_CipherMode = lnv_cryp.CipherMode_ECB /*ECB模式*/
else
	ll_CipherMode = lnv_cryp.CipherMode_CBC /*CBC模式*/
End IF

//密钥长度位,一个字符为8位,128即为16个字符,192为24个字符,256为32个字符
long ll_keyLen
IF ddlb_keylen.Text="128" Then
	ll_keyLen = 128
elseIF ddlb_keylen.Text="192" Then
	ll_keyLen = 192
elseIF ddlb_keylen.Text="256" Then
	ll_keyLen = 256
else
	ll_keyLen = 128
End IF

blob ls_out//解密后的内容
long ll_outLen//解密后的内容长度(字节数)
//以下进行解密
IF lnv_cryp.of_sm4_decrypt(&
		ll_CipherMode,  /*模式*/ &
		lnv_cryp.PaddingMode_PKCS5, /*PKCS5填充方式*/ &
		ll_keyLen, /*密钥位长度*/&
		ls_data,ls_key,ls_IV, &
		ls_out_code,/*加密后的内容编码*/ &
		ls_out,ll_outLen) then
	IF rb_utf8.checked then//utf-8编码
		sle_2.Text = lnv_cryp.of_utf8ToGbk(ls_out,ll_outLen)
	else
		sle_2.Text = string(ls_out)
	End IF
else
	messagebox("","解密失败")
End IF





 具体参考w_encrypt的SM4加密解密按钮中的代码

代码下载地址:https://download.csdn.net/download/my_aa/12309197 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值