混淆要保存在文本文件中的字符串 [英] Obfuscating a string to be saved in a text file

查看:85
本文介绍了混淆要保存在文本文件中的字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试对字符串进行混淆处理,以使用户不容易读取它。但是,混淆后的字符串应采用可以存储在文本文件中的字符串形式,而不是按字节形式存储在二进制文件中。我从尝试了一些方法来根据但未成功:

  def myencode(ori_str,key):
enc = []
for i in range(len(ori_str)):
key_c = key [i%len(key)]
enc_c =(ord(ori_str [i])+ ord( key_c))%256
enc.append(enc_c)
返回base64.urlsafe_b64encode(bytes(enc))

fn以上的输出需要存储在二进制文件中。将 ..._ b64encode(bytes(enc))更改为 ..._ b64encode(enc)无效。 / p>

如何获得可以存储在文本文件中的类似结果?






编辑:
相应的解码fn如下:

  def mydecode(enc_str,key) :
dec = []
enc_str = base64.urlsafe_b64decode(enc_str)
for i in range(len(enc_str)):
key_c = key [i%len(key) ]
dec_c = chr((256 + enc_str [i]-ord(key_c))%256)
dec.append(dec_c)
return .join(dec)


解决方案

  def myencode_str(ori_str,键):
enc = []
for i in range(len(ori_str)):
key_c =键[i%len(key)]
enc_c =(ord( ori_str [i])+ ord(key_c))%256
enc.append(enc_c)
return(base64.urlsafe_b64encode(bytes(enc)))。decode( utf-8)

或查看此处为完整示例:

 从cryptography.fernet导入Fernet 

类Encrypt(object):
'''
参见https://cryptography.io/en/latest/fernet/
'''

@classmethod
def加密( cls,plain_text):
'''
@param enctypted_text:str或字节
@return cipher_text:str(.decode()将字节字符串转换为字符串)
'' '
if isinstance(plain_text,str):
plain_text = plain_text.encode()
elif not isinstance(plain_text,bytes):
提高ValueError('值必须是字符串或位元组')
cipher_suite = Fernet(config.KEY.encode())
cipher_text = cipher_suite.encrypt(plain_text).decode()
返回cipher_text

@ classmethod
def解密(cls,enctypted_text):
'''
@param enctypted_text:str或字节
@return plain_text:str(.decode()co n将字节字符串转换为字符串)
'''
如果isinstance(enctypted_text,str):
enctypted_text = enctypted_text.encode()
elif not isinstance(enctypted_text,bytes):
提高ValueError('值必须是字符串或字节')
cipher_suite = Fernet(config.KEY.encode())
plain_text = cipher_suite.decrypt(enctypted_text).decode()
return plain_text

@ classmethod
def generateKey(cls):
键= Fernet.generate_key()
返回键*


I am trying to obfuscate a string so that it is not easily read by users. However, the obfuscated string should be in form a string that can be stored in a text file, not in byte form to be stored in binary file. I tried some approaches from Simple way to encode a string according to a password? but was not successful:

def myencode(ori_str, key):
    enc = []
    for i in range(len(ori_str)):
        key_c = key[i % len(key)]
        enc_c = (ord(ori_str[i]) + ord(key_c)) % 256
        enc.append(enc_c)
    return base64.urlsafe_b64encode(bytes(enc))

Output of above fn needs to be stored in a binary file. Changing ..._b64encode(bytes(enc)) to ..._b64encode(enc) does not work.

How can I achieve similar result that can be stored in a text file?


Edit: The corresponding decode fn is as follows:

def mydecode(enc_str, key):
    dec = []
    enc_str = base64.urlsafe_b64decode(enc_str)
    for i in range(len(enc_str)):
        key_c = key[i % len(key)]
        dec_c = chr((256 + enc_str[i] - ord(key_c)) % 256)
        dec.append(dec_c)
    return "".join(dec)

解决方案

def myencode_str(ori_str, key):
    enc = []
    for i in range(len(ori_str)):
        key_c = key[i % len(key)]
        enc_c = (ord(ori_str[i]) + ord(key_c)) % 256
        enc.append(enc_c)
    return (base64.urlsafe_b64encode(bytes(enc))).decode("utf-8") 

or see here for a full example:

from cryptography.fernet import Fernet

class Encrypt(object):
    '''
    see https://cryptography.io/en/latest/fernet/
    '''

    @classmethod
    def encrypt(cls, plain_text):
        '''
        @param enctypted_text: str or bytes
        @return cipher_text: str (.decode() converts the byte string to string)
        '''
        if isinstance(plain_text, str):
            plain_text = plain_text.encode()
        elif not isinstance(plain_text, bytes):
            raise ValueError('Value must be string or bytes')
        cipher_suite = Fernet(config.KEY.encode())
        cipher_text = cipher_suite.encrypt(plain_text).decode()
        return cipher_text

    @classmethod
    def decrypt(cls, enctypted_text):
        '''
        @param enctypted_text: str or bytes
        @return plain_text: str (.decode() converts the byte string to string)
        '''
        if isinstance(enctypted_text, str):
            enctypted_text = enctypted_text.encode()
        elif not isinstance(enctypted_text, bytes):
            raise ValueError('Value must be string or bytes')
        cipher_suite = Fernet(config.KEY.encode())
        plain_text = cipher_suite.decrypt(enctypted_text).decode()
        return plain_text

    @classmethod
    def generateKey(cls):
        key = Fernet.generate_key()
        return key*

这篇关于混淆要保存在文本文件中的字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆