frankyara 2016-03-16 03:23 采纳率: 0%
浏览 1776
已采纳

帮我看下这个程序的加密解密过程,python;详细点

-*- coding: utf-8 -*-

import datetime
import logging
from ctypes import *
import socket
from xml.dom import minidom

logger=logging.getLogger(__name__)

class BankTrader(object):
TRANSACT_TYPE_IC='icCard'
TRANSACT_TYPE_STRIP='stripCard'

# 参数全部为字符串,不能是unicode
def __init__(self,host,port,regionId,terminalID,atmNumber):
    self.logger=logger
    # 装载加密、解密方法
    self.fdesdll=cdll.LoadLibrary("fdes.dll")
    self.fdesdll.nEncrptPkg.restype=c_int
    self.fdesdll.nEncrptPkg.argtypes=[c_char_p,c_char_p,c_char_p,POINTER(c_int)]
    self.fdesdll.nDeEncrpt.restype=c_int
    self.fdesdll.nDeEncrpt.argtypes=[c_char_p,c_char_p,c_char_p,POINTER(c_int)]
    self.host=host
    self.port=port
    self.regionId=regionId
    self.terminalID=terminalID
    self.atmNumber=atmNumber
    # 密钥明文,必须为字符串,默认为='1234567887654321'
    self.encrptionKey='1234567887654321'
    # 银行卡BIN号
    self.bank_bins=[]
    # 最近查询的帐户余额
    self.lastBalance=''

# separator='0x',0x010x020x03
# separator=' ',01 02 03
# separator='',010203
def str2hex(self,value,separator='0x'):
    v='0x'.join(n.encode('hex') for n in value)
    v='0x'+v
    if separator=='':
        a=v.split('0x')
        v=''.join(n for n in a[1:])
        return v
    elif separator==' ':
        a=v.split('0x')
        v=' '.join(n for n in a[1:])
        return v
    else:
        return v

# 加密,参数全部为字符串,不能是unicode
def encrpt(self,source):
    acheadbody=source
    # 保证加密内容的长度为8的倍数
    for n in range(8-(len(acheadbody)%8)):
        acheadbody=acheadbody+' '
    acRadKey=self.encrptionKey
    acencheadbody=create_string_buffer(1024*5)
    packlen=c_int(len(acheadbody))
    success=(self.fdesdll.nEncrptPkg(acheadbody,acencheadbody,acRadKey,byref(packlen))==0)
    value=acencheadbody.raw[:packlen.value]
    return success,value
  • 写回答

2条回答 默认 最新

  • oyljerry 2016-03-16 11:24
    关注

    主要就是加载dll。然后调用dll的函数。传递对应的参数数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 51单片机使lcd显示器开机闪烁预设字符闪烁3次需要加什么代码
  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题