python加密小程序 贪心学院第一个主题项目代码

#首先导入库,其实我只用到了numpy里的函数

import numpy as np
#import re
#import requests
#import matplotlib.pyplot as plt
import numpy as np  

#第二步,设置自己的密码映射集(规则自己定,英文+中文+数字)
‘’’
规则:
1.如果是大写,变小写;反之,小写变大写
2.如果是汉字,它的ascii值立方放大
3.如果是数字,它的ascii值立方放大(可以平方放大,随意),此代码采用立方
4.如果是其他的字符,保持原样

思路:
首先用if,elif,else语句把不同种情况下的字符转变为加密后的字符
例如: 1.由 value= ord(‘爱’) 得到爱(中文字符)的ascii值 value=29233,value为 int类型
2.value 进行对应的函数变换,得到新的value_new = 值(假设是立方函数)
3.把 value_new 进行字符串化:‘29233**3’
4. 为了在解码的时候方便知道是什么类型,中文还是英文还是数字,所以考虑在3步骤之后加上独特的一个字符作为暗示,比如|这个字符
5.由上,爱 的对应的 加密后的形式为 ‘24981594792337|’,解码的时候判断如果有‘|’,则调用中文字符解码语句
6.其他数字,字母亦然,我学到的是一个思维,至于函数如何,可以稍作自我发挥

关键: 用列表分隔表示出,加密后的消息,一个字符加密后对应一长串放在列表的相应位置。
例如: 我爱你啊2! 哈哈22*

          编码后显示为:15822703032625|24981594792337|8390176768000|10408782121704|125000,! 10223964721664|10223964721664|125000,125000,*
          编码后的列表形式 :['15822703032625|', '24981594792337|', '8390176768000|', '10408782121704|', '125000,', '!', ' ', '10223964721664|', '10223964721664|', '125000,', '125000,', '*']
           
          解释:第一个字符 '我' 编码后对应了 列表里的第一个元素 '15822703032625|',以此类推。
                然后思考,只要我得到了类似这种加密后的消息,我只要遍历元素找到最后一个字符,然后进行判断字符类型。
                然后就可以解码了。

#-------------------------------------------------------------------------------------------------------------------------------

编码 encoding
#-------------------------------------------------------------------------------------------------------------------------------

邀请您输入消息

message = input('请输入>>>>>') 

#可以打印观察记住
print(message)


# 开始编码
result=''
result_list=[]
  ## 遍历消息中的每一个字符
for char in message:
    value=ord(char)
    ## 如果Message中有数字的话,立方 
    if 47 < value < 57  : 
        # 并且用','号来暗示,方便解码
        result_char = str(value**3)+','
        result += result_char
        result_list.append(result_char)

        # 如果有中文的话,这里我还是用了立方,其实可以用别的
    elif 19967 < value < 40917:
        #这里用‘|’来作为暗示
        result_char=str(value**3)+"|"
        result+= result_char
        result_list.append(result_char)

        # 如果说是大写字母,这里用‘s'标记
    elif  64 < value < 91:
        result_char=str(value+32)+'s'
        result+= result_char
        result_list.append(result_char)

        #如果是小写字母,这里用'b'作标记
    elif 96 < value < 123:
        result_char = str(value-32)+'b'
        result+= result_char
        result_list.append(result_char)

        # 如果以上都不是,保持原样
    else:
        result+= char
        result_list.append(char)
        
# 看看加密后的消息,以及列表形式表示出来
print('加密后为:'+ result)
print('加密后列表形式为',result_list)

#--------------------------------------------------------------------------------------------------------------------------------

开始解码, decoding

注意:result_list[i][0:-1]是选择除了最后一个字符的字符串
      '1243124515a'中得到'1243124515'

#--------------------------------------------------------------------------------------------------------------------------------


# 结果的列表形式
result_list_str=[]

#遍历  
for i in range(len(result_list)):
    #根据 标记,是数字
    if ',' in result_list[i]:
        result_list_str.append(chr( int( np.cbrt( int(  result_list[i][0:-1] ) ) ) ))

    # 根据 标记,是中文汉字
    elif '|' in result_list[i]:
        result_list_str.append(chr( int( np.cbrt( int(  result_list[i][0:-1] ) ) ) ) )

    # 根据标记,是大写字母
    elif 's' in result_list[i]:
        result_list_str.append(chr(  int(  result_list[i][0:-1] )-32    ))

    #根据标记,是小写字母
    elif 'b' in result_list[i]:
        result_list_str.append(chr(  int(  result_list[i][0:-1] )+32    ))

    # 根据标记,是其他字符
    else:
        result_list_str.append(result_list[i])      
print('解码后的列表形式:',result_list_str)   

# 得到解码的字符串形式
decode=''
for i in range(len(result_list_str)):
    decode+=result_list_str[i]
print('当当当当!!!!解码完毕!您的消息解码后为:',decode)

附上我的知乎的文章的链接:https://zhuanlan.zhihu.com/p/76589317

猜你喜欢

转载自blog.csdn.net/weixin_43702920/article/details/99393088