algorithm-base icon indicating copy to clipboard operation
algorithm-base copied to clipboard

ab.keys.crypto加密导致Python高版本镜像无法调用

Open KitoSang opened this issue 2 years ago • 2 comments

Traceback (most recent call last):
    File "/usr/local/bin/abt", line 5, in <module>
    from ab.client.cli import cli
   File "/usr/local/lib/python3.8/site-packages/ab/client/cli.py", line 3, in <module>
     from ab.client.crypto_cli import crypto_impl
   File "/usr/local/lib/python3.8/site-packages/ab/client/crypto_cli.py", line 4, in <module>
     from ab.keys.crypto import ab_encryptFile
 ModuleNotFoundError: No module named 'ab.keys.crypto'

项目中ab.keys.crypto文件是经过加密后的文件,使用python3.7以上版本镜像时无法直接调用该文件,导致加密失败。 查看源码发现代码加密不需要用到ab.keys.crypto文件引用,可以注释相关内容加密代码,但数据加密仍然需要crypto内容。 另外license的验证失败了,是否与使用license.py加密时step1函数中sout = [chr(ord(a) ^ ord(b)) for (a, b) in zip(input_line, cycle("your-key"))]的“your-key”有关?由于ab.keys.crypto的加密同样无法验证 请问能否提供一份未加密的crypto.py文件?

KitoSang avatar Nov 15 '23 08:11 KitoSang

Traceback (most recent call last):
    File "/usr/local/bin/abt", line 5, in <module>
    from ab.client.cli import cli
   File "/usr/local/lib/python3.8/site-packages/ab/client/cli.py", line 3, in <module>
     from ab.client.crypto_cli import crypto_impl
   File "/usr/local/lib/python3.8/site-packages/ab/client/crypto_cli.py", line 4, in <module>
     from ab.keys.crypto import ab_encryptFile
 ModuleNotFoundError: No module named 'ab.keys.crypto'

项目中ab.keys.crypto文件是经过加密后的文件,使用python3.7以上版本镜像时无法直接调用该文件,导致加密失败。 查看源码发现代码加密不需要用到ab.keys.crypto文件引用,可以注释相关内容加密代码,但数据加密仍然需要crypto内容。 另外license的验证失败了,是否与使用license.py加密时step1函数中sout = [chr(ord(a) ^ ord(b)) for (a, b) in zip(input_line, cycle("your-key"))]的“your-key”有关?由于ab.keys.crypto的加密同样无法验证 请问能否提供一份未加密的crypto.py文件?

因为这个文件中包含了许可证验证逻辑,密钥等信息,所以没有开源。相关内容需要自己实现一下,空代码如下

import pyAesCrypt
import os
import io
import contextlib
import hashlib
from os import stat
from itertools import cycle
from datetime import timedelta, datetime, date

from ab.utils.exceptions import AlgorithmException

bufferSizeDef = 64 * 1024


def license_impl(create, days, verify):
    if create is not None:
        license_create(create, days)
    if verify is not None:
        license_verify(verify)


def license_create(path, days):
    """
    ###!!! 需实现 ###!!!
    在指定path下创建许可文件,许可文件的有效期为days天
    """
    pass



def license_verify(license_file_path):
    """
    ###!!! 需实现 ###!!!
    验证 license_create 中创建的许可文件是否合法。
    如果验证不通过,抛出异常
    """
    pass


# 加密文件扩展名
SEC_FILE_POSTFIX = ".sec"


def decrypt_to_memory(infile):
    """
    将加密文件解密并读取到内存ByteIO
    :param infile:
    :param passw_fun():
    :param bufferSize:
    :return:
    """
    try:
        with open(infile, "rb") as fIn:
            try:
                fOut = io.BytesIO()
                inputFileSize = stat(infile).st_size
                try:
                    # decrypt file stream
                    decryptStream(fIn, fOut, inputFileSize)
                    return fOut
                except ValueError as exd:
                    # should not remove output file here because it is still in use
                    # re-raise exception
                    raise ValueError(str(exd))
            except IOError:
                raise ValueError("Unable to write output file.")
            except ValueError as exd:
                # remove output file on error
                # re-raise exception
                raise ValueError(str(exd))

    except IOError:
        raise ValueError("Unable to read input file.")


def ab_encryptFile(infile, outfile):
    """
    ###!!! 需实现 ###!!!
    加密文件
    """
    pass


def encryptStream(fIn, fOut):
    pass

def decryptStream(fIn, fOut, inputLength):
    """
    ###!!! 需实现 ###!!!
    解密文件流
    """
    pass

def encrypt_file():
    pass


def encrypt_stream():
    pass


def encrypt_file2():
    pass


def encrypt_file3():
    pass


def encrypt_file4():
    pass

cactusgame avatar Nov 29 '23 02:11 cactusgame

好的非常感谢

KitoSang avatar Nov 30 '23 08:11 KitoSang