本文主要是介绍[BJDCTF 2020]base??(古典密码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
从题目我们看出dict是一个python的字典,但与原始的base64的表不同,所以我们想到通过替换原始的表,来对密文解密。
my_dict={0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h', 33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='}keys=''
for key in my_dict:keys+=my_dict[key]
print("keys=",keys)
string1=keys[:64]
print("string1=",string1)
import base64
import string
str1='FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw'string2='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'##标准的 base64 字符串 string2
print(base64.b64decode(str1.translate(str.maketrans(string1,string2))))
print("映射",(str.maketrans(string1,string2)))
print("映射2",(str1.translate(str.maketrans(string1,string2))))
'''
`str.maketrans(string1, string2)` 方法用于创建一个映射表,其中 `string1` 是原始字符集,`string2` 是目标字符集。这个方法返回一个映射表,该表可以用于 `str.translate()` 方法来进行字符替换。这里的映射原理是将 `string1` 中的每个字符映射到 `string2` 中的对应位置的字符上,实现一一对应的替换关系。具体来说,如果 `string1` 和 `string2` 的长度不同,那么将会以较短的字符串长度为准,多余的字符将被忽略。举个简单的例子:假设有两个字符串 `string1 = "ABC"` 和 `string2 = "XYZ"`,那么映射关系就是:- 将字符 `'A'` 替换为 `'X'`
- 将字符 `'B'` 替换为 `'Y'`
- 将字符 `'C'` 替换为 `'Z'`如果我们使用 `str.maketrans(string1, string2)`,它将返回一个映射表,该表可以将字符串中的 `'A'` 替换为 `'X'`,`'B'` 替换为 `'Y'`,`'C'` 替换为 `'Z'`。这个映射表可以用于 `str.translate()` 方法,用来对字符串进行替换操作,实现自定义的字符映射关系。
'''
这篇关于[BJDCTF 2020]base??(古典密码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!