java毕业设计代做网站关键字排名查询工具
GMT0130-2023具体描述基于SM2算法的隐式证书公钥机制,这里尝试Python代码实现密钥生成部分功能,具体如下,椭圆曲线计算实现使用python第三方包gmssl。
#生成用户私钥Da和公钥Pa,其中Da=(tA+d'A)mod N,Pa可以直接用Da计算出来,当然也可以使用标准中的公式Pa=WA+[lambda]Ppub得到。
def on_click_gen_da_pa():global asymmetric_sm2_imp_user_da_text, default_sm2_tabletry:ta_h = gen_ta()d_a = bytes.fromhex(asymmetric_sm2_imp_user_da_text.get(1.0, END).strip().replace("\n", ""))d_a_h = d_a.hex()da = (int(ta_h, base=16) + int(d_a_h, base=16)) % int(default_sm2_table['n'], base=16)da_h = f'{da:32x}'write_log_to_Text("INFO:Da " + da_h, 2)pa_h = gen_p(da_h)write_log_to_Text("INFO:Pa " + pa_h, 2)except Exception as e:write_log_to_Text("ERROR:generate User keys failed:" + str(e), 2)
#计算tA=(w+lambda*ms)mod N
def gen_ta():global asymmetric_sm2_imp_kgc_w_text, asymmetric_sm2_imp_kgc_ms_text,default_sm2_tablew = bytes.fromhex(asymmetric_sm2_imp_kgc_w_text.get(1.0, END).strip().replace("\n", ""))w_h = w.hex()lambda_ = gen_lamda()ms = bytes.fromhex(asymmetric_sm2_imp_kgc_ms_text.get(1.0, END).strip().replace("\n", ""))ms_h = ms.hex()ta = (int(w_h, base=16) + int(lambda_, base=16)*int(ms_h, base=16)) % int(default_sm2_table['n'], base=16)ta_h = f'{ta:32x}'write_log_to_Text("INFO:Ta " + ta_h, 2)return ta_h
#计算lambda=Hash_SM3(x_WA||y_WA||Ha) mod N
def gen_lamda():global default_sm2_tableHA = gen_ha()(WA_x, Wa_y) = gen_wa()lambda_before_hash = WA_x + Wa_y + HAlambda_before_hash_bytes = bytes.fromhex(lambda_before_hash)lambda_i_d = [ch for ch in lambda_before_hash_bytes]lambda___ = gmssl.sm3.sm3_hash(lambda_i_d)lambda__ = int(lambda___, base=16) % int(default_sm2_table['n'], base=16)lambda_h = f'{lambda__:64x}'write_log_to_Text("INFO:lambda " + lambda_h, 2)return lambda_h
#计算WA=[w]G+Ua
def gen_wa():global asymmetric_sm2_imp_user_ua_x_var, asymmetric_sm2_imp_user_ua_y_var, asymmetric_sm2_imp_kgc_w_textw = bytes.fromhex(asymmetric_sm2_imp_kgc_w_text.get(1.0, END).strip().replace("\n", ""))w_h = w.hex()wa_p_h = gen_p(w_h, 2)ua_h = asymmetric_sm2_imp_user_ua_x_var.get() + asymmetric_sm2_imp_user_ua_y_var.get()tSm2 = sm2.CryptSM2('','')WA = tSm2._convert_jacb_to_nor(tSm2._add_point(wa_p_h, ua_h))WA_x = WA[0:64]WA_y = WA[64:]write_log_to_Text("INFO:WA_x " + WA_x, 2)write_log_to_Text("INFO:WA_y " + WA_y, 2)return WA_x, WA_y
#计算Ha=Hash_SM3(ENTLa||IDa||a||b||x_G||y_G||x_pub||y_pub)
def gen_ha():global asymmetric_sm2_imp_user_id_var, default_sm2_table, asymmetric_sm2_imp_kgc_pub_x_var, asymmetric_sm2_imp_kgc_pub_y_varida = asymmetric_sm2_imp_user_id_var.get().encode('GBK')ida_h = ida.hex()pubx = asymmetric_sm2_imp_kgc_pub_x_var.get()puby = asymmetric_sm2_imp_kgc_pub_y_var.get()entla = len(ida)*8entla_h = f'{entla:04x}'HA_before_hash = entla_h + str(ida_h) + default_sm2_table['a'] + default_sm2_table['b'] + default_sm2_table['g'] + pubx + pubyHA_before_hash_bytes = bytes.fromhex(HA_before_hash)ha_i_d = [ch for ch in HA_before_hash_bytes]ha_h = gmssl.sm3.sm3_hash(ha_i_d)write_log_to_Text("INFO:HA " + ha_h, 2)return ha_h
实现结果: