zoukankan      html  css  js  c++  java
  • 国产sm4加密 及smb mont挂载

    看此代码前  请自行搭建smb服务器:then    look!!!!

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # date:2013-05-07 by ny
    from gmssl.sm4 import CryptSM4, SM4_ENCRYPT, SM4_DECRYPT
    from smb.SMBConnection import *
    import logging
    import os
    import re
    
    
    def encry_xml(file_path):
        try:
            key = b'xxxxxxxxxxxxxxxx'
            crypt_sm4 = CryptSM4()
            #file_path = r"xxx/xxxx/xx.xml"
            ecb_path_en = file_path
            ecb_path_en = ecb_path_en.rstrip(".xml") + "_test.xml"
            f = open(file_path, 'rb')
            value = f.read()
            f.close()
            crypt_sm4.set_key(key, SM4_ENCRYPT)
            encrypt_value = crypt_sm4.crypt_ecb(value)
            # os.remove(file_path)  # 删除原有的加密文件
            f = open(ecb_path_en, 'wb')  # 重新写入,路径和文件名与原来一致
            f.write(encrypt_value)
            f.close()
            return ecb_path_en
        except Exception, e:
            print e
            logging.info("加密失败")
            return False
    
    
    def smb_send_report(path):
        '''
        smb 上传报表
        '''
        smb_address = 'xxxxxxx' # smb ip
        smb_user = 'xxxx'
        smb_password = 'xxxxxx'
        smb_my_name = "anyname"
        smb_remote_name = ""
        service_name = 'share'  # 可配置服务名
        # 初始化一个samba访问对象
        samba = SMBConnection(smb_user, smb_password, smb_my_name, smb_remote_name)
        # 创建一个samba连接
        smb_port = 139
        x = samba.connect(smb_address, smb_port)  # 返回True/False
        if not x:
            logging.info('连接失败')
            samba.close()
            return
        filename = os.path.join(path,'xxx.xml')
        if not filename:
            logging.info('没有找到待传文件')
            samba.close()
            return
        print filename
        # 过滤掉特殊字符
        filename = re.sub(r'[/:*?"<>|]', '_', filename)
        # 调用加密函数,加密成功返回加密文件路径加名,失败返回False
        if encry_xml(filename):
            up_file = encry_xml(filename)
        else:
            logging.info('加密失败')
            return
        # 上传文件到服务器
    
        try:
            f = open(up_file, 'rb')
        except Exception, e:
            print e
            logging.info('打开文件失败')
            f.close()
            samba.close()
            return
        # smb_path = '/'  # 远程文件地址
        try:
            # 上传文件
            t = samba.storeFile(service_name, filename, f)
            print t  # 上传字节数
            f.close()
            samba.close()
            # print "up success"
        except Exception, e:
            print e
            # print 'up failure'
            logging.info('up failure')
            f.close()
            samba.close()
            return
        samba.close()
    
    
    
    
    if __name__ == '__main__':
        # 通过下面的方式进行简单配置输出方式与日志级别
        logging.basicConfig(filename='logger.log', level=logging.INFO)
        # logging.debug('debug message')
        # logging.info('info message')
        # logging.warn('warn message')
        # logging.error('error message')
        # logging.critical('critical message')
        # 发送加密报表
        path= 'xxx/xxx/xxx'
        smb_send_report(path)
        

     附加sm2加解密 单纯回忆下

    from gmssl.gmssl import sm2, func
    private_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5'
    public_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207'
    sm2_crypt = sm2.CryptSM2(
    public_key=public_key, private_key=private_key)
    
    
    
    
    data ='111'
    enc_data = sm2_crypt.encrypt(data)
    dec_data =sm2_crypt.decrypt(enc_data)
    assert dec_data == data
  • 相关阅读:
    Java实现埃拉托色尼筛选法
    Java实现希尔排序
    Java实现希尔排序
    Java实现希尔排序
    Java实现希尔排序
    Java实现希尔排序
    Java实现插入排序
    Java实现插入排序
    Java实现插入排序
    使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序 good(从VS2012 update1开始支持xp和c++11)
  • 原文地址:https://www.cnblogs.com/nanyu/p/10906700.html
Copyright © 2011-2022 走看看