#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:zhangjunhui time:2019/5/8
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'AES.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
import os
import re
from Crypto.Cipher import AES as KAES
from Crypto.Util import Counter as KCounter
from Crypto import Random
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import Crypto.Signature.PKCS1_v1_5 as sign_PKCS1_v1_5 #用于签名/验签
import Crypto.Signature.pss as pss
from Crypto import Hash
from gmssl import sm2, func,sm3
from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT
from Crypto.Util.number import ceil_div, bytes_to_long, long_to_bytes
from Crypto.Util.py3compat import bord, _copy_bytes
import Crypto.Util.number
#from Crypto.PublicKey import ECC
from Crypto.PublicKey.ECC import EccPoint, _curves, EccKey,generate
'''
n = 0xdd7108d066ecfabf4ea4fe0d9244cc6d932b2a40b2a4c29ff984458b1030435f9a213ad7760e5aebb956286532b79eb17f3ac1f726a77073f85dc0e2ed7ed5b009b6b743a1d3228b5b8e3ababbb82435a8ee5a659b10e94cdfb2ae10c4eb55c83d5973cf2431516e72764164736df6f3151d637479b70d0ceddfd3bee0619342556109ee42b1781cdcc781b55931e5df1f265e1f19d3154dc9d30a1ede7e66beefcb9d87d7616bd90b44a55ce0bece3bdbf8196888d540aed9996990605089eca58168494832c8630aafaf707be6512bcb4083341d0d337f2f8a82dee7c715a6b094fa6eeae585dde100fc641cf14b22f85dd040f6e4edbb506727febe3794a7
d = 0x4c904e075c66f88597c8054d24f323a9893665fc0ba85ae09c118747ff3768bc0fdb0870c1d151cf69fbe7a8a1c20a1cfdcc0f8f882e617bbf768f00073490e6b65d15fd4ce0e6f33f1b2ca42ece8aba80e7b49aa7e44f7df4645fb9cd943ecb26a71c9b14bcf69654fe1d3b018c1653d2cb9ffd002e71d53413ed2ef47ed83e74fcb8d55992206c3f9e5f3761742042a042bee4b843f0b50a00f677e30488e5c9e2f75cb3d36660835b52546bfd3eb3a026fdc00005490b5e015c9bd7eaa921fb4d4b5e220fbfcd35fe075f39169cd7f4478981888fc34795c94fdf577cf651b18df3397c48d0f12fd41caf4ddb89f3b0fcbd7e2aa78efeb30470119f4728f5
e = 0x0000010001
p = 0xe887fa93ce5845da5bbe8a126379933013bf70bdd3ae1ba41c235bfafa16b86d8c61b5b734fe1feb8f9a0075a38650a1646ef9aeec6cddfffb7b6ab6baf203147ca83301731590d0f24cadc18a07f1c93ab2abdf631af63272e817c3731b1e32513ae7c0af5968343afaf507461e7a98132a63917653abd01b2bb4ad67a7a3ad
q = 0xf3ca870bc00df42b496d2b1c93da8c02d3f5c8e9531b525993514296807489e56b33589ed953cf91bfb4008f05eefc57a319246fafe783126370495e0f6d1f6f5ce927247179b95ecb76b61672f3c6df006df62393328da80298b7afd8c9d702f1f1827bb702bea4b83cd9c420b7c241081dfe3933d3478dac9a2138ee638423
u = 0x91f94b052a6a35848bfddbe6a14302c0baf561ea61b7ae8cf5ca9be8b5e8f93f6529a0b2efaafc5f949d4b50aeb1f9ce009fc973069aa5a6cc2d556e94fdac93e4e1afe5bfed304fedbce90476c94e2e7958c2c22ec0ec4231b7b761ba2abe2edf626814000d6d200c89bc42f06da3e8045ef72bcfb2d9a16c1cfa4f926e8523
'''
rsa_n = 0xdd7108d066ecfabf4ea4fe0d9244cc6d932b2a40b2a4c29ff984458b1030435f9a213ad7760e5aebb956286532b79eb17f3ac1f726a77073f85dc0e2ed7ed5b009b6b743a1d3228b5b8e3ababbb82435a8ee5a659b10e94cdfb2ae10c4eb55c83d5973cf2431516e72764164736df6f3151d637479b70d0ceddfd3bee0619342556109ee42b1781cdcc781b55931e5df1f265e1f19d3154dc9d30a1ede7e66beefcb9d87d7616bd90b44a55ce0bece3bdbf8196888d540aed9996990605089eca58168494832c8630aafaf707be6512bcb4083341d0d337f2f8a82dee7c715a6b094fa6eeae585dde100fc641cf14b22f85dd040f6e4edbb506727febe3794a7
rsa_d = 0x4c904e075c66f88597c8054d24f323a9893665fc0ba85ae09c118747ff3768bc0fdb0870c1d151cf69fbe7a8a1c20a1cfdcc0f8f882e617bbf768f00073490e6b65d15fd4ce0e6f33f1b2ca42ece8aba80e7b49aa7e44f7df4645fb9cd943ecb26a71c9b14bcf69654fe1d3b018c1653d2cb9ffd002e71d53413ed2ef47ed83e74fcb8d55992206c3f9e5f3761742042a042bee4b843f0b50a00f677e30488e5c9e2f75cb3d36660835b52546bfd3eb3a026fdc00005490b5e015c9bd7eaa921fb4d4b5e220fbfcd35fe075f39169cd7f4478981888fc34795c94fdf577cf651b18df3397c48d0f12fd41caf4ddb89f3b0fcbd7e2aa78efeb30470119f4728f5
rsa_e = 0x0000010001
rsa_p = 0xe887fa93ce5845da5bbe8a126379933013bf70bdd3ae1ba41c235bfafa16b86d8c61b5b734fe1feb8f9a0075a38650a1646ef9aeec6cddfffb7b6ab6baf203147ca83301731590d0f24cadc18a07f1c93ab2abdf631af63272e817c3731b1e32513ae7c0af5968343afaf507461e7a98132a63917653abd01b2bb4ad67a7a3ad
rsa_q = 0xf3ca870bc00df42b496d2b1c93da8c02d3f5c8e9531b525993514296807489e56b33589ed953cf91bfb4008f05eefc57a319246fafe783126370495e0f6d1f6f5ce927247179b95ecb76b61672f3c6df006df62393328da80298b7afd8c9d702f1f1827bb702bea4b83cd9c420b7c241081dfe3933d3478dac9a2138ee638423
rsa_u = 0x91f94b052a6a35848bfddbe6a14302c0baf561ea61b7ae8cf5ca9be8b5e8f93f6529a0b2efaafc5f949d4b50aeb1f9ce009fc973069aa5a6cc2d556e94fdac93e4e1afe5bfed304fedbce90476c94e2e7958c2c22ec0ec4231b7b761ba2abe2edf626814000d6d200c89bc42f06da3e8045ef72bcfb2d9a16c1cfa4f926e8523
#sm2_public_key = 0x09F9DF311E5421A150DD7D161E4BC5C672179FAD1833FC076BB08FF356F35020CCEA490CE26775A52DC6EA718CC1AA600AED05FBF35E084A6632F6072DA9AD13
#sm2_private_key = 0x3945208F7B2144B13F36E38AC6D39F95889393692860B51A42FB81EF4DF7C5B8
#sm2_private_key = 0x4bf20bf21a66d49ff9dbb0fb4bd3849f27b15005430b7c95d55def0467315210
#sm2_public_key = 0xb03509e41d7f8a9cc608165742baf43b299d0dffe15f6fec206dead3493a748c57e116349ed1ed59cddad915f2a02fdf624bbd616b25a512f169bf349e2ab099
sm2_private_key = 0x1052316704ef5dd5957c0b430550b1279f84d34bfbb0dbf99fd4661af20bf24b
sm2_public_key = 0x99b02a9e34bf69f112a5256b61bd4b62df2fa0f215d9dacd59edd19e3416e1578c743a49d3ea6d20ec6f5fe1ff0d9d293bf4ba42571608c69c8a7f1de40935b0
#key = os.urandom(16)
#SM4密钥
key = bytes.fromhex('8f522511dc82aa691c42296ae4595ca8') #aes
#AES密钥
#key =bytes.fromhex('985b11297696f6d66920bc672aa78b86') #SM4
iv = os.urandom(16)
class MySm4:
def __init__(self):
#长度128bit,16个字符
#self.key = b'3l5butlj26hvv313'
self.key = key
self.iv = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' # bytes类型
self.SM4 = CryptSM4()
def encrypt_cbc(self,plaintext):
self.SM4.set_key(self.key,SM4_ENCRYPT)
ciphertext = self.SM4.crypt_cbc(iv,plaintext)
return ciphertext
def decrypt_cbc(self,ciphertext):
self.SM4.set_key(self.key,SM4_DECRYPT)
plaintext = self.SM4.crypt_cbc(iv,ciphertext)
return plaintext
def encrypt_ecb(self,plaintext):
self.SM4.set_key(self.key,SM4_ENCRYPT)
ciphertext = self.SM4.crypt_ecb(plaintext)
return ciphertext
def decrypt_ecb(self,ciphertext):
self.SM4.set_key(self.key,SM4_DECRYPT)
plaintext = self.SM4.crypt_ecb(ciphertext)
return plaintext
def test_MySM4(self):
print('/////////////////////////////////////SM4 test/////////////////////////////////////////')
msg = 'aabbccddddddddddddddddddddddddddd'
print('CBC')
e = self.encrypt_cbc(msg.encode(encoding='utf-8'))
d = self.decrypt_cbc(e)
print('加密前:',msg)
print('len(e):',len(e))
print('解密后:',d.decode('utf-8'))
print('ECB')
e = self.encrypt_ecb(msg.encode(encoding='utf-8'))
d = self.decrypt_ecb(e)
print('加密前:',msg)
print('解密后:',d.decode('utf-8'))
class MyCryptSM2(sm2.CryptSM2):
def __init__(self,private_key, public_key, ecc_table=sm2.default_ecc_table,ID = '31323334353637383132333435363738'):
super().__init__(private_key, public_key, ecc_table)
self.ID = ID
#ID为字符串
def sign(self,msg):
'''
Z=SM3(ENTL||ID||a||b||xG||yG||xA||yA)
e = SM3(Z||msg)
(x1,y1) = [rand_k]G
r = (e+x1) mod n
s = ((1+dA)(-1)*(k-rdA)) mod n dA是私钥
'''
Z = self.getZ()
#print('Z:',Z)
E = self.getE(msg,Z)
#print('E:',E)
rand_k = int(func.random_hex(self.para_len),16)
#rand_k = 0x59276E27D506861A16680F3AD9C02DCCEF3CC1FA3CDBE4CE6D54B80DEAC1BC21
P1 = self._kg(rand_k, self.ecc_table['g'])
x = int(P1[0:s
评论0