精华内容
下载资源
问答
  • Python字符加密解密方法总结

    千次阅读 2019-05-09 07:57:39
    编程中经常会对字符串做加密解密处理,特别是涉及到隐私的字符串,如密码等的时候,就需要加密,自己总结了一下,大致有三种:base64,win32com.client和自己写加密解密算法,当然最安全的就是自己写加密解密算法了...

      编程中经常会对字符串做加密解密处理,特别是涉及到隐私的字符串,如密码等的时候,就需要加密,自己总结了一下,大致有三种:base64,win32com.client和自己写加密解密算法,当然最安全的就是自己写加密解密算法了。

      1. 最简单的方法是用base64:

      import base64

      s1 = base64.encodestring('hello world')

      s2 = base64.decodestring(s1)

      print s1,s2

      # aGVsbG8gd29ybGQ=\n

      # hello world

      注: 这是最简单的方法了,但是不够保险,因为如果别人拿到你的密文,也可以自己解密来得到明文;不过可以把密文字符串进行处理,如字母转换成数字或是特殊字符等,自己解密的时候在替换回去在进行base64.decodestring,这样要安全很多。

      2. 第二种方法是使用win32com.client

      import win32com.client

      def encrypt(key,content): # key:密钥,content:明文

      EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData')

      EncryptedData.Algorithm.KeyLength = 5

      EncryptedData.Algorithm.Name = 2

      EncryptedData.SetSecret(key)

      EncryptedData.Content = content

      return EncryptedData.Encrypt()

      def decrypt(key,content): # key:密钥,content:密文

      EncryptedData = win32com.client.Dispatch('CAPICOM.EncryptedData')

      EncryptedData.Algorithm.KeyLength = 5

      EncryptedData.Algorithm.Name = 2

      EncryptedData.SetSecret(key)

      EncryptedData.Decrypt(content)

      str = EncryptedData.Content

      return str

      s1 = encrypt('lovebread', 'hello world')

      s2 = decrypt('lovebread', s1)

      print s1,s2

      # MGEGCSsGAQQBgjdYA6BUMFIGCisGAQQBgjdYAwGgRDBCAgMCAAECAmYBAgFABAgq

      # GpllWj9cswQQh/fnBUZ6ijwKDTH9DLZmBgQYmfaZ3VFyS/lq391oDtjlcRFGnXpx

      # lG7o

      # hello world

      注: 这种方法也很方便,而且可以设置自己的密钥,比第一种方法更加安全,如果对安全级别要求不太高的话这种方法是加密解密的首选之策!

      3. 还有就是自己写加密解密算法,比如:

      def encrypt(key, s):

      b = bytearray(str(s).encode(gbk))

      n = len(b) # 求出 b 的字节数

      c = bytearray(n*2)

      j = 0

      for i in range(0, n):

      b1 = b[i]

      b2 = b1 ^ key # b1 = b2^ key

      c1 = b2 % 16

      c2 = b2 // 16 # b2 = c2*16 + c1

      c1 = c1 + 65

      c2 = c2 + 65 # c1,c2都是0~15之间的数,加上65就变成了A-P 的字符的编码

      c[j] = c1

      c[j+1] = c2

      j = j+2

      return c.decode(gbk)

      def decrypt(key, s):

      c = bytearray(str(s).encode(gbk))

      n = len(c) # 计算 b 的字节数

      if n % 2 != 0 :

      return

      n = n // 2

      b = bytearray(n)

      j = 0

      for i in range(0, n):

      c1 = c[j]

      c2 = c[j+1]

      j = j+2

      c1 = c1 - 65

      c2 = c2 - 65

      b2 = c2*16 + c1

      b1 = b2^ key

      b[i]= b1

      try:

      return b.decode(gbk)

      except:

      return failed

      key = 15

      s1 = encrypt(key, 'hello world')

      s2 = decrypt(key, s1)

      print s1,'\n',s2

      # HGKGDGDGAGPCIHAGNHDGLG

      # hello world

      注: 这是网上抄来的一个简单的例子,大家可以自定义自己算法进行加密解密;还有许许多多复杂的加密算法,大家可以自行查阅密码学的相关算法。

      4.对于python来说,也可以把python源码文件编译成pyc二进制格式的文件,这样别人就看不到你的源码,也算是一种加密方法吧,方法如下:

      执行命令python -m py_compile create_slave.py 可以直接生成一个create_slave.pyc文件,然后可以用create_slave.pyc来替换create_slave.py作为脚本来执行。


    转载于:https://juejin.im/post/5cd3cba76fb9a03246586be6

    展开全文
  • 使用换位加密加密 ...换位加密法不是把字符替换成其他字符,而是搞乱消息符号的顺序,使原来的消息不可读。换位加密法具有更多可能的密钥,更难暴力破译。 加密步骤如下: 1.数一下消息里的字符个数 2.画一

    使用换位加密法加密

    主要内容

    • 使用def语句创建函数
    • main()函数
    • 参数
    • 全局作用域和本地作用域,全局变量和本地变量
    • 列表数据类型,列表与字符串的相似之处
    • list()函数
    • 列表的列表
    • 增强赋值运算符(+=、-=、*=、/=)
    • join()字符串方法
    • 返回值和return语句
    • 特殊的_name_变量

    4.1 换位加密法

    • 换位加密法不是把字符替换成其他字符,而是搞乱消息符号的顺序,使原来的消息不可读。换位加密法具有更多可能的密钥,更难暴力破译。
    • 加密步骤如下:
      • 1.数一下消息里的字符个数
      • 2.画一行个数等于密钥的格子
      • 3.从左到右填充格子,每个格子填一个字符
      • 4.当用完格子还有字符剩下时,再加一行格子
      • 5.把最后一行剩下不用的格子涂成灰色
      • 6.从最上角开始往下写出字符,到达这一列的底部后,移到右边的那一列。跳过任何灰色的格子,这就是密文。

    4.2 换位加密法加密程序

    • 如果密文末尾右空格字符很难看出,所以程序会在密文末尾加上一个|字符(“管道”字符)
    # Transposition Cipher Encryption
    # 换位加密法加密程序的源代码
    
    import pyperclip
    
    def main():
        myMessage = 'Common sense is not so common.'
        myKey = 8
    
        ciphertext = encryptMessage(myKey, myMessage)
    
        # Print the encrypted string in ciphertext to the screen, with
        # a | (called "pipe" character) after it in case there are spaces at
        # the end of the encrypted message.
        print(ciphertext + '|')
    
        # Copy the cncrypted string in ciphertext to the clipboard.
        pyperclip.copy(ciphertext)
    
    
    def encryptMessage(key, message):
        # Each string in ciphertext represents a column in the grid.
        ciphertext = [''] * key
    
        # Loop through each column in ciphertext.
        for col in range(key):
            pointer = col
    
            # Keep looping until pointer goes past the length of the message.
            while  pointer < len(message):
                # Place the character at pointer in message at the end of the
                # current column in the ciphertext list.
                ciphertext[col] += message[pointer]
    
                # move pointer over
                pointer += key
    
        # Convert the ciphertext iist into a single string value and return it.
        return ''.join(ciphertext)
    
    
    # If transpositionEncrypt.py is run (instead of imported as a module) call
    # the main() function
    if __name__ == '__main__':
        main()
    

    4.3 运行换位加密法加密程序

    运行以上代码,产生输出为:Cenoonommstmme oo snnio. s s c

    4.4 使用def语句创建自己的函数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDcDFMX0-1601902506210)(attachment:image.png)]

    def语句表示我们正在创建(或者说定义)一个新的名为main()的函数,我们会在程序后面调用它。

    def hello():
        print('Hello')
        total = 42 + 1
        print('42 plus 1 is %s' % (total))
    
    print('Start!')
    hello()
    print('Call it again.')
    hello()
    print('Done.')
    
    Start!
    Hello
    42 plus 1 is 43
    Call it again.
    Hello
    42 plus 1 is 43
    Done.
    

    当程序运行时,执行会从顶部开始。第一行是定义了hello()函数的def语句,执行跳过def之后的代码块,执行Print(‘Start!’)这一行。

    4.5 程序的main()函数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BgwqPOk-1601902506222)(attachment:image.png)]

    • main()函数总是在程序开始不久调用的。

    • 第7行和第8行的myMessage变量和myKey变量保存将要加密的明文消息和用于加密的密钥。

        ciphertext = encryptMessage(myKey, myMessage)
    
    • 进行实际加密工作的代码放在第21行定义的encryptMessage()函数,这个函数接受两个参数:表示 密钥的整数值和表示要加密的消息的字符串值。
    • encryptMessage()的返回值是加密之后的密文的字符串值,这个字符串保存在ciphertext里。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LXe4ZZI6-1601902506230)(attachment:image.png)]

    • 第15行把密文消息输出到屏幕,第18行把它复制到剪贴板。
    • 第18行是main()函数的最后一行,在它执行之后,程序的执行将会返回到调用它的那行后面的一行。main()函数的调用是在第45行,是程序的最后一行,所以在执行从main()函数的返回后,程序就会退出。

    4.6 形参

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eMKiVurH-1601902506242)(attachment:image.png)]

    • 形参(parameter)是在函数被调用时包含被传递实参(argument)的变量,形参在函数返回时自动删除。
    • 形参是def语句的括号里的变量名,实参是函数调用期间传入括号里的值。

    4.7 对形参的修改只存在于函数之内

    def func(param):
        param = 42
    
    spam = 'Hello'
    func(spam)
    print(spam)
    
    Hello
    
    • 当使用spam作为实参调用func()时,spam变量未传入func()函数,也未被赋值42,spam的值被复制并赋给param。
    • 在函数里对param做出的任何修改都不会改变spam变量里的值。
    • “传入”函数调用的实参值是复制给形参的,所以如果形参被修改,提供实参值的变量不会改变。

    4.8 全局作用域和本地作用域里的变量

    • myKey和myMessage在main()函数的本地作用域里,不能在main()函数以外使用。
    • 每次调用一个函数就会创建一个本地作用域,在函数调用期间创建的变量存在于这个本地作用域里。当函数返回时,本地作用域将被销毁,本地变量也会 消失。本地作用域里的变量相对于全局变量来说是一个独立的变量,即使两个变量有着相同的名字。
    • 在每个函数以外创建的变量存在于全局作用域。当程序退出时,全局作用域将被销毁,程序里的所有变量也会消失。

    4.9 global语句

    • 如果希望在函数里赋值的变量是全局变量而不是本地变量,可以把带有变量名的global语句放在def语句之后的第一行。

    • 决定一个变量是全局变量还是本地变量的规则:

      • 1.在所有函数以外的变量总是全局变量。
      • 2.如果函数里的变量从未在赋值语句里使用,那么它是全局变量。
      • 3.如果函数里的变量未在global语句里使用,但在赋值语句里使用,那么它是本地变量。
      • 4.如果函数里的变量在global语句里使用,那么它在那个函数里使用时,它是全局变量。
    spam = 24    # global spam
    
    def eggs():
        spam = 99    # spam in this function is local
        print('In eggs(): ', spam)
        
    def ham():
        print('In ham(): ', spam)  # spam in this function is global
        
    def bacon():
        global spam    # spam in this function is global
        print('In bacon(): ', spam)
        spam = 0
        
    def CRASH():
        print(spam)     # spam in this function is local
        spam  = 0
        
    print(spam)
    eggs()
    print(spam)
    ham()
    print(spam)
    bacon()
    print(spam)
    CRASH()
    
    24
    In eggs():  99
    24
    In ham():  24
    24
    In bacon():  24
    0
    
    
    
    ---------------------------------------------------------------------------
    
    UnboundLocalError                         Traceback (most recent call last)
    
    <ipython-input-6-1709d19fe22e> in <module>()
         24 bacon()
         25 print(spam)
    ---> 26 CRASH()
    
    
    <ipython-input-6-1709d19fe22e> in CRASH()
         14 
         15 def CRASH():
    ---> 16     print(spam)     # spam in this function is local
         17     spam  = 0
         18 
    
    
    UnboundLocalError: local variable 'spam' referenced before assignment
    
    • 第3行的eggs()函数里,spam变量在第4行被赋值为99,因此Python把这个spam变量看作是名为spam的本地变量,与同样名为spam的全局变量完全不同。
    • 第8行的ham()函数里的spam变量在这个函数里没有在赋值语句里使用,所以它是一个全局变量。
    • 第10行的bacon()函数里的spam变量在global语句里使用,因此这个是一个名为spam的全局变量。第13行的spam = 0赋值语句会改变全局变量spam的值。
    • 第15行的CRASH()函数里的spam变量在赋值语句(而不是global语句)里使用,因此这个函数里的spam变量是本地变量。然而,在第17行被复制之前。它在第16行的print()函数调用里使用了,所以导致程序出现崩溃,出现“UnboundLocalError: local variable ‘spam’ referenced before assignment”错误。

    4.10 列表数据类型

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xUCfHxVO-1601902506254)(attachment:image.png)]

    这里使用了一种新的数据类型,叫做列表数据类型。列表值可以包含其他值,以左括号[为开始,以右括号]为结束。保存在列表里的值要放在括号里,多个值之间用逗号分隔。

    对于字符串的很多操作同样可以在列表上进行,例如索引和分片。这里索引指向的不是字符串里的单个字符,而是列表里的一个项。

    Lakers = ['Bryant', 'James', 'Majic Jonson', 'Logo Man', 'Paul Gosol']
    Lakers[0]
    
    'Bryant'
    
    Lakers[4]
    
    'Paul Gosol'
    
    Lakers[1:3]
    
    ['James', 'Majic Jonson']
    

    for循环也能迭代列表里的值,保存在for循环的变量里的值是列表的单个值:

    for spam in ['Bryant', 'James', 'Majic Jonson', 'Logo Man', 'Paul Gosol']:
        print(spam + ' is a super star of LA Lakers.')
    
    Bryant is a super star of LA Lakers.
    James is a super star of LA Lakers.
    Majic Jonson is a super star of LA Lakers.
    Logo Man is a super star of LA Lakers.
    Paul Gosol is a super star of LA Lakers.
    

    4.11 使用list()函数把区间对象转换成列表

    如果需要一个包含递增整数值的列表值,可以用for循环构建一个列表值:

    myList = []
    for i in range(10):
        myList = myList + [i]
        
    myList
    
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    使用List()函数从range()函数返回的区间对象构建列表更为简单:

    myList = list(range(10))
    myList
    
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    list()函数还能把字符串转换成列表值,这个列表会包含原来的字符串里的每个字符:

    myList = list('Hello World!')
    myList
    
    ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!']
    

    4.12 重新赋值列表里的项

    列表里的项也能被修改,索引可以在普通赋值语句里使用。

    Lakers = ['Bryant', 'James', 'Majic Jonson', 'Logo Man', 'Paul Gosol']
    Lakers
    
    ['Bryant', 'James', 'Majic Jonson', 'Logo Man', 'Paul Gosol']
    
    Lakers[3] = 'Shaq Onel'
    Lakers
    
    ['Bryant', 'James', 'Majic Jonson', 'Shaq Onel', 'Paul Gosol']
    

    4.13 重新赋值字符串里的字符

    虽然可以重新赋值列表里的项,但不能重新赋值字符串值里的字符。

    'Hello world!'[6] = 'x'
    
    ---------------------------------------------------------------------------
    
    TypeError                                 Traceback (most recent call last)
    
    <ipython-input-22-32f8a79ca62c> in <module>()
    ----> 1 'Hello world!'[6] = 'x'
    
    
    TypeError: 'str' object does not support item assignment
    

    要改变字符串里的字符,可以使用分片:

    spam = 'Hello world!'
    spam = spam[:6] + 'x' + spam[7:]
    spam
    
    'Hello xorld!'
    

    4.14 列表的列表

    列表值还可以包含其他列表值。

    spam = [['dog', 'cat'], [1, 2, 3]]
    spam[0]
    
    ['dog', 'cat']
    
    spam[0][0]
    
    'dog'
    
    spam[0][1]
    
    'cat'
    
    spam[1][0]
    
    1
    
    spam[1][1]
    
    2
    

    甚至可以再加一组索引括号

    spam = [['dog', 'cat'], [1, 2, 3]]
    spam[0][1][1]
    
    'a'
    

    4.15 在列表上使用len()和in运算符

    len()函数也可以用在列表值上,返回一个整数表示这个列表里有多少项。

    Lakers = ['Bryant', 'James', 'Majic Jonson', 'Logo Man', 'Paul Gosol']
    len(Lakers)
    
    5
    

    in运算符也能用来判断一个值是否存在于一个列表里。

    Lakers = ['Bryant', 'James', 'Majic Jonson', 'Logo Man', 'Paul Gosol']
    'Bryant' in Lakers
    
    True
    
    'Howard' in Lakers
    
    False
    

    4.16 使用+和*运算符的列表连接和复制

    与字符串中的使用类似,+和*运算符可以实现列表连接和复制

    ['Hello'] + ['world']
    
    ['Hello', 'world']
    
    ['hello'] * 3
    
    ['hello', 'hello', 'hello']
    

    4.17 换位加密算法

    如果用纸笔画出格子,可以表示为:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lCkklriQ-1601902506257)(attachment:image.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lilrEhyH-1601902506264)(attachment:image.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3prXqIGJ-1601902506271)(attachment:image.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nQXBpbyQ-1601902506275)(attachment:image.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fsIVSuwZ-1601902506278)(attachment:image.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1In4MJ9C-1601902506281)(attachment:image.png)]

    4.18 增强赋值运算符

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VvFYqpsK-1601902506283)(attachment:image.png)]

    4.19 回到代码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmf3DrAx-1601902506286)(attachment:image.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2WmsxBbS-1601902506291)(attachment:image.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DxDhFuxj-1601902506293)(attachment:image.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FHUPPo4T-1601902506296)(attachment:image.png)]

    4.20 jion()字符串方法

    join()方法接受一个字符串列表,并返回一个字符串。这个字符串包含了列表里的所有字符串,连接起来(也就是合并)。调用join()方法的字符串会放在列表里的字符串之间。

    eggs = ['dogs', 'cats', 'moose']
    ''.join(eggs)
    
    'dogscatsmoose'
    
    ' '.join(eggs)
    
    'dogs cats moose'
    
    'XYZ'.join(eggs)
    
    'dogsXYZcatsXYZmoose'
    
    ''.join(eggs).upper().join(eggs)
    
    'dogsDOGSCATSMOOSEcatsDOGSCATSMOOSEmoose'
    

    最后一个表达式看起来比较复杂,展开计算过程每一步,将会是:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P9hbcO9N-1601902506299)(attachment:image.png)]

    4.21 返回值和return语句

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dBSSCU1o-1601902506301)(attachment:image.png)]

    一个函数或方法的调用总是计算得到一个值,我们说这个是函数或方法的调用返回的值,或者说它是函数的返回值。当我们使用def语句创建我们自己的函数时,我们使用return语句告诉我们函数的返回值是什么。

    return语句是return关键字后面跟着要返回的值。我们也可以使用一个表达式而不是一个值,在这种情况下,返回值将是那个表达式计算得到的值。

    def addNumbers(a, b):
        return a + b
    
    spam = addNumbers(12, 21)
    print(spam)
    
    33
    

    4.22 回到代码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NrqSrDdv-1601902506303)(attachment:image.png)]

    encryptMessage()函数的return语句返回一个字符串值,它是通过合并ciphertext列表里所有的字符串创建出来的,这个最终的字符串就是我们加密代码的结果。

    4.23 特殊的__name__变量

    展开全文
  • python高级练习题:简单的加密#4 - 标准键盘【难度:3级】: 你必须写两个方法来加密* * 和* 解密* 字符串. 这两种方法有两个参数: 1.以加密字符串/解密 2. QWERTY全加密密钥(000-999) 规则很简单: 该crypting...

    python高级练习题:简单的加密#4 - 标准键盘【难度:3级】:

    你必须写两个方法来加密* * 和* 解密* 字符串.
    这两种方法有两个参数:

    
    1.以加密的字符串/解密
    2. QWERTY全加密密钥(000-999)
    
    

    规则很简单:

    
    该crypting区域是从你的键盘这3行:
    1. "QWERTYUIOP"
    2. "ASDFGHJKL"
    3. "ZXCVBNM,".
    
    如果字符串的一个字符是不是在这些地区,采取直接焦炭的产量.
    如果字符串的字符是在这些地区之一:通过在关键的部分移动它
    区域,并借此在炭从所述区域的位置.
    如果运动就在这个区域的长度,继续开始.
    加密字符必须像解密字符不变的情况下!
    所以大写,字符的区域相同,但按下"SHIFT"!
    
    加密密钥是一个整数从000到999例如为:127
    
    键(例如,1)的第一位数字是用于第一线的移动.
    键(例如,2)的第二个数字是用于第二线的移动.
    键(例如,7)的第三个数字是用于第三行的运动.
    
    (考虑,关键是一个整数!当你有一个0,这将意味着000 A 1将意味着001等.)
    
    

    你不需要做任何预检查.这些字符串将始终不空
    并且将始终有一个长度> 0.你不必抛出任何异常.

    一个例子:

    
    加密"球"与关键字134
    1."B"是在第三区域线.每4个名额将在该地区. - > ">"(!而且 "大写")
    2."a"是在第二区域线.每3个名额将在该地区. - > "F"
    3."l"是在第二区域线.每3个名额将在该地区. - > "d"
    4."l"是在第二区域线.每3个名额将在该地区. - > "d"
     - >输出将是 "> FDD"
    
    
    • 提示:不要忘记:该区域是从美国的键盘点击*!
    • 在怀疑谷歌的"美式键盘".*
      搜索结果

    这习题是简单的加密系列的一部分:点击
    简单的加密#1 - 斯普利特交替结果
    简单的加密#2 - 指数差分结果
    简单的加密#3 - 周转位点击
    简单的加密#4 - Qwerty全结果

    有乐趣的编码它,请不要忘记投票和排列此习题! ?

    编程目标:

    def encrypt(text, encryptKey):
        pass
    def decrypt(text, encryptKey):
        pass
    
    
    

    测试样例:

    test.describe("Example tests")
    test.it("Encryption tests")
    test.assert_equals(encrypt("A", 111), "S")
    test.assert_equals(encrypt("Abc", 212), "Smb")
    test.assert_equals(encrypt("Wave", 0), "Wave") # -> 000
    test.assert_equals(encrypt("Wave", 345), "Tg.y")
    test.assert_equals(encrypt("Ball", 134), ">fdd")
    test.assert_equals(encrypt("Ball", 444), ">gff")
    test.assert_equals(encrypt("This is a test.", 348), "Iaqh qh g iyhi,")
    test.assert_equals(encrypt("Do the kata Kobayashi Maru Test. Endless fun and excitement when finding a solution.", 583),
                      "Sr pgi jlpl Jr,lqlage Zlow Piapc I.skiaa dw. l.s ibnepizi.p ugi. de.se.f l arkwper.c")
    test.it("Decryption tests")
    test.assert_equals(decrypt("S", 111), "A")
    
    
    

    最佳答案(多种解法):

    点击查看答案

    更多关联题目:

    交流讨论:

    Python基础训练营景越Python基础训练营QQ群
    在这里插入图片描述
    欢迎各位同学加群讨论,一起学习,共同成长!

    免责申明:

    本博客所有编程题目及答案均收集自互联网,主要用于供网友学习参考,如有侵犯你的权益请联系管理员及时删除,谢谢
    题目收集至https://www.codewars.com/
    https://www.codewars.com/kata/simple-encryption-number-4-qwerty

    展开全文
  • Python试题——字符

    2018-05-12 07:00:16
    1. 在众多编码方式中,_______________是不同编码格式之间互相转换的基础2. 对字符串格式化的两种方法包括,格式化符号_________和格式化方法____________3. ___________是与随机数生成有关的Python标准库4. ...

    1. 在众多编码方式中,_______________是不同编码格式之间互相转换的基础

    2. 对字符串格式化的两种方法包括,格式化符号_________和格式化方法____________

    3. ___________是与随机数生成有关的Python标准库

    4. 编程实现随机生成一个8位密码,打印输出该随机密码;再对该密码进行加密(加密方法不限);打印输出“网络传输”字符串,模拟密码的网络传输;对密码进行解密,识别出原密码并打印输出。

    提示:加密方法可以使用凯撒加密(tanslatemaketransreplace等方法实现);可以使用单字符加密(数学计算的方法);异或算法加密等

    要求:尽量定义密码生成方法、加密和解密方法来实现,保证程序的可读性和可扩展性

    5. 模拟微信的拼手气红包和普通红包的算法实现红包功能。要求用户输入红包总金额和红包数目,选择红包方法拼手气红包和普通红包。最终打印输出分配方案和分配金额。

    要求:尽量定义两个方法分别实现拼手气红包算法和普通红包算法。

    展开全文
  • python进阶练习题:间谍代理【难度:2级】: 作为贵国的间谍你能够获得密信从一般送到附近的战争地区的军营.你的任务是回收利用的关键和使用包括加密,加密text.The消息是凯撒加密系统的变化. 凯撒密码的算术表示为:E_ {...
  • 您的第一个测试是编写一个算法,在以下步骤中加密给定的字符串. 1.加密的第一步是标准的ROT13密码. 这是caesar密码的一个特例,其中的字母用其密钥加密,字母是字母下面的十三个字母, 即`A => N,B => O,C => ....
  • 目录0 前言1 大小写转化的方法2 字符串填充3 字符串编码4 字符串查找5 字符串格式化6 解决判断问题7 字符串修剪8 字符加密解密9 分割字符串9 字符串替换10 统计字符次数 0 前言 python字符串对象提供了很多方法...
  • 优点: a、易于维护和学习 b、广泛的标准库【提供了大量的工具】 ...d、Python对于大多数据库都有相应的接口 e、支持GUI编程【图形化界面】 f、简单,易学 2、缺点: a、运行速度慢 b、代码无法加密 ...
  • 3.对拆分字符串的元素进行计算加密,每位加密后存入一个列表 4.对列表元素1-4,3-2进行交换。 5.组合成加密数输出 编码实现 1.编码实现 import random as rdm n=rdm.randint(1000,9999) print(f
  • Python入门笔记

    2020-11-17 22:31:26
    这篇文章适合有一定编程基础,想要快速学习python的小伙伴 这里只列出python与其他语言的不同之处或特点 缺点 速度慢 代码不能加密。因为python是解释型的语言 输入输出 输出多行 print('''1 2 3''') 其结果为 1 ...
  • chardet:字符编码检测器,兼容 Python2Python3。 difflib:(Python 标准库)帮助我们进行差异化比较。 ftfy:让 Unicode 文本更完整更连贯。 fuzzywuzzy:模糊字符串匹配。 Levenshtein:快速计算编辑距离...
  • 尹成Python27天入门到项目实战

    千人学习 2020-12-05 17:04:22
    python字符串与绘图复习变量None变量参与运算没有赋值的情况不会改变绘制立方体绘制五角星时间计算强化实现贷款计算连续输入多个字符串加法与绘图实现显示线段长度数据函数使用快速查阅函数帮助字符串三种风格字符...
  • a = input("输入(1.base64加密/2.base64解密):") base64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' if a == '1': s = input("\n输入待加密字符串:") t1 = '' d = 0 for a in s...
  • Python 编程的重要组织形式,内置模块中的内置函数也极大方便了编程过程中对函数等功能的使用。 Python 中常见的内置模块如下: os模块:文件和目录,用于提供系统级别的操作; sys模块:用于提供对解释器相关的...
  • 通过编程实现替代密码和置换密码算法,在这里通过python实现了对凯撒密码的加密与解密,以及对矩阵换位密码的加密与解密。 凯撒密码的相关算法是O(n)O(n)O(n)的时间复杂度,矩阵换位密码的加密解密算法是O(n2)O(n^2)...
  • Python网络编程 - 套接字的概念 / socket模块 / socket函数 / 创建TCP服务器 / 创建TCP客户端 / 创建UDP服务器 / 创建UDP客户端 / SocketServer模块 电子邮件 - SMTP协议 / POP3协议 / IMAP协议 / smtplib模块 / ...
  • 基本数据类型从尾到头抹零实现加密器判断奇偶数公倍数天天向上的力量第一问天天向上的力量第二问天天向上的力量第三问天天向上的力量第四问删除字符插入字符你中无我拼接最大字符单词转换统计词量回文字符串过滤敏感...
  • 10 在python2中的继承顺序是什么 11 在子类中调用父类方法 12 super调用父类的方法 13 选择系统作业讲解 第26章 01 学生自主复习 02 分享列表 03 多态 04 封装 05 面向对象概念总结 06 反射 07 反射及动态导入模块...
  • 备注:已知有python版本,有点重复造轮子。但exe的不用其它依赖,双击打开就能用岂不美哉! 首先我们通过GitHub大神获得小程序包已知加密算法: PC端微信把wxapkg给加密加密后的文件的起始为V1MMWX。 加密方法...
  • python for s60编程最适合机型为塞班s60v3横屏手机。请自行在手机上安装python平台, 代码编写编译反编译测试工具“ipro7”,请安装sis程序打包解包py程序打包权限修改 签名工具“智能解包”。 其中包括: 1....
  • 2讲:Netty宏观理解 第3讲:Netty课程大纲深度解读 第4讲:项目环境搭建与Gradle配置 第5讲:Netty执行流程分析与重要组件介绍 第6讲:Netty回调与Channel执行流程分析 第7讲:Netty的Socket编程详解 第8讲...
  • Python的优势目前应用特点Part 2 6种内置对象1 整数、浮点数2 字符串3 列表4 元组5 字典6 集合什么是浅拷贝shallow copy案例2.1 编写程序,根据输入的半径,计算圆的面积案例2.2 编写程序,实现凯撒密码,按照规定的...
  • Minizip:Zlib最新bug修复,支持PKWARE磁盘跨越,AES加密和IO缓冲。 smaz:小型字符压缩库。 Snappy :快速压缩和解压缩。 ZLib :非常紧凑的数据流压缩库。 zlib-ng:用于“下一代”系统的zlib,将一些重要的...
  • 2.ppt │ 3.ppt │ 4.ppt │ 5.ppt │ 6.ppt │ 7.ppt │ 8.ppt │ ├─matlab课件 │ 数字图像处理01.ppt │ 数字图像处理02-灰度处理.ppt │ 数字图像处理03-投影分割.ppt │ 数字图像处理04-形态学处理.ppt ...
  • SpringCloud Conf 配置中心 属性加解密之对称加密 Spring Cloud 配置中心 认证和高可用 Spring Cloud技术分析-spring cloud zuul Spring Cloud Zuul微服务网关的API限流 mybatis 更多干货 Mybatis知识点...
  • [系统安全] 二十六.WannaCry勒索病毒分析(1)Python利用永恒之蓝及Win7勒索加密 [系统安全] 二十七.WannaCry勒索病毒分析(2)MS17-010利用及病毒解析 [系统安全] 二十八.WannaCry勒索病毒分析(3)蠕虫传播机制分析及IDA...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

python字符加密2编程

python 订阅