常见古典密码

article/2025/9/25 9:17:52

古典密码

文章目录

  • 古典密码
  • 前言
    • 1.Affine(仿射加密)
    • 2.Bacon(培根加密)
    • 3.Brainfuck
    • 4.Caesar(凯撒加密)
    • 5.Fence(栅栏加密)
    • 6.Fenham(费纳姆加密)
    • 7.Morse(摩斯密码)
    • 8.Pigen(猪圈加密)
    • 9.Vigenere(维吉尼亚加密)



前言

系统的学习了一下古典密码,这里大概整理一下主要的加密方式以及实现加解密的python代码。

1.Affine(仿射加密)

单码加密法的另一种形式称为仿射加密法(affine cipher)。在仿射加密法中,字母表的字母被赋予一个数字,例如a=0,b=1,c=2…z=25。仿射加密法的密钥为0-25直接的数字对。

代码:

# 乘法逆元
def multiplicative_inverse(key_a, a_z=26):inv = 1while True:if (key_a * inv) % a_z == 1:breakinv = inv + 1return inv# 加密
def encipher(key_a, key_b, txt):result = ""if judge_a(key_a) == 0:result = "key_a必须是1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25"else:if isinstance(key_b, int):for i in txt.lower():if i.isalpha():temp = ((ord(i) - 97) * key_a + key_b) % 26 + 97result = result + chr(temp)else:result = result + ielse:result = "key_b必须为整数"return result# 解密
def decipher(key_a, key_b, cipher):result = ""if judge_a(key_a) == 0:result = "key_a必须是1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25"else:if isinstance(key_b, int):a_inv = multiplicative_inverse(key_a)for i in cipher.lower():if i.isalpha():temp = (((ord(i) - 97) - key_b) * a_inv) % 26 + 97result = result + chr(temp)else:result = result + ielse:result = "key_b必须为整数"return resultdef judge_a(key_a):range_a = (1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25)if key_a in range_a:return key_aelse:return 0if __name__ == "__main__":a = 3b = -1text = 'hello word'print(encipher(a, b, text))print(decipher(a, b, 'ulggp npyi'))

输出:

ulggp npyi
hello word

2.Bacon(培根加密)

培根密码,又名倍康尼密码(英语:Bacon’s cipher)是由法兰西斯·培根发明的一种隐写术。
加密时,明文中的每个字母都会转换成一组五个英文字母。

'A': 'aaaaa', 'B': 'aaaab', 'C': 'aaaba', 'D': 'aaabb', 'E': 'aabaa', 'F': 'aabab',
'G': 'aabba',
'H': 'aabbb', 'I': 'abaaa', 'J': 'abaab', 'K': 'ababa', 'L': 'ababb', 'M': 'abbaa', 
'N': 'abbab',
'O': 'abbba', 'P': 'abbbb', 'Q': 'baaaa', 'R': 'baaab', 'S': 'baaba', 'T': 'baabb',
'U': 'babaa', 'V': 'babab', 'W': 'babba', 'X': 'babbb', 'Y': 'bbaaa', 'Z': 'bbaab'

培根密码实际上就是一种替换密码,根据所给表一一对应转换即可加密解密 。它的特殊之处在于:可以通过不明显的特征来隐藏密码信息,比如大小写、正斜体等,只要两个不同的属性,密码即可隐藏。
解密时,将上述方法倒转。所有字体一转回A,字体二转回B,以后再按上表拼回字母。

代码:

def encipher1(txt):bacon_dict1 = {'A': 'aaaaa', 'B': 'aaaab', 'C': 'aaaba', 'D': 'aaabb', 'E': 'aabaa', 'F': 'aabab', 'G': 'aabba','H': 'aabbb', 'I': 'abaaa', 'J': 'abaab', 'K': 'ababa', 'L': 'ababb', 'M': 'abbaa', 'N': 'abbab','O': 'abbba', 'P': 'abbbb', 'Q': 'baaaa', 'R': 'baaab', 'S': 'baaba', 'T': 'baabb','U': 'babaa', 'V': 'babab', 'W': 'babba', 'X': 'babbb', 'Y': 'bbaaa', 'Z': 'bbaab'}result = ""txt = txt.upper()for i in txt:try:result = result + bacon_dict1[i]except KeyError:result = result + ireturn resultdef encipher2(txt):bacon_dict2 = {'a': 'AAAAA', 'b': 'AAAAB', 'c': 'AAABA', 'd': 'AAABB', 'e': 'AABAA', 'f': 'AABAB', 'g': 'AABBA','h': 'AABBB', 'i': 'ABAAA', 'j': 'ABAAA', 'k': 'ABAAB', 'l': 'ABABA', 'm': 'ABABB', 'n': 'ABBAA','o': 'ABBAB', 'p': 'ABBBA', 'q': 'ABBBB', 'r': 'BAAAA', 's': 'BAAAB', 't': 'BAABA','u': 'BAABB', 'v': 'BAABB', 'w': 'BABAA', 'x': 'BABAB', 'y': 'BABBA', 'z': 'BABBB'}result = ""txt = txt.lower()for i in txt:try:result = result + bacon_dict2[i]except KeyError:result = result + ireturn result# 文本->bacon
def encipher(txt):results = [encipher1(txt), encipher2(txt)]return resultsdef decipher1(txt):bacon_dict1_txt = {'aaaaa': 'A', 'aaaab': 'B', 'aaaba': 'C', 'aaabb': 'D', 'aabaa': 'E', 'aabab': 'F', 'aabba': 'G','aabbb': 'H', 'abaaa': 'I', 'abaab': 'J', 'ababa': 'K', 'ababb': 'L', 'abbaa': 'M', 'abbab': 'N','abbba': 'O', 'abbbb': 'P', 'baaaa': 'Q', 'baaab': 'R', 'baaba': 'S', 'baabb': 'T','babaa': 'U', 'babab': 'V', 'babba': 'W', 'babbb': 'X', 'bbaaa': 'Y', 'bbaab': 'Z'}result = ""txt = txt.lower()for i in range(0, len(txt), 5):try:result = result + bacon_dict1_txt[txt[i:i + 5]]except KeyError:result = result + "?"return resultdef decipher2(txt):bacon_dict2_txt = {'AAAAA': 'a', 'AAAAB': 'b', 'AAABA': 'c', 'AAABB': 'd', 'AABAA': 'e', 'AABAB': 'f', 'AABBA': 'g','AABBB': 'h', 'ABAAA': '(i/j)', 'ABAAB': 'k', 'ABABA': 'l', 'ABABB': 'm', 'ABBAA': 'n','ABBAB': 'o', 'ABBBA': 'p', 'ABBBB': 'q', 'BAAAA': 'r', 'BAAAB': 's', 'BAABA': 't','BAABB': '(u/v)', 'BABAA': 'w', 'BABAB': 'x', 'BABBA': 'y', 'BABBB': 'z'}result = ""txt = txt.upper()for i in range(0, len(txt), 5):try:result = result + bacon_dict2_txt[txt[i:i + 5]]except KeyError:result = result + '?'return result# bacon->文本
def decipher(txt):results = [decipher1(txt), decipher2(txt)]return resultsif __name__ == '__main__':print(encipher("sfauh"))print(decipher("abbaabbaaa"))

输出:

ulggp npyi
hello word

3.Brainfuck

是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf** k,甚至被简称为BF.
这种语言,是一种按照“Turing complete(图灵完备)”思想设计的语言,它的主要设计思路是:用最小的概念实现一种“简单”的语言,BrainF**k 语言只有八种符号,所有的操作都由这八种符号的组合来完成。

代码:

def brain_fuck(code):data = [0 for i in range(1000)]pc = 0ptr = 0skip_loop = Falsebracket_count = 0stack = []result = ''while pc < len(code):c = code[pc]if skip_loop:if c == '[':bracket_count += 1elif c == ']':bracket_count -= 1if bracket_count == 0:skip_loop = Falsepc += 1continueif c == '>':ptr += 1pc += 1elif c == '<':ptr -= 1pc += 1elif c == '+':data[ptr] += 1pc += 1elif c == '-':data[ptr] -= 1pc += 1elif c == '.':result = result + chr(data[ptr])pc += 1elif c == ',':pc += 1elif c == '[':if data[ptr] == 0:# nonlocal bracket_count,skip_loopbracket_count = 1skip_loop = Truepc += 1else:pc += 1stack.append(pc)elif c == ']':if data[ptr] == 0:pc += 1stack.pop()else:pc = stack[len(stack) - 1]return resultif __name__ == '__main__':print(brain_fuck('++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.'))

输出:

Hello World!

4.Caesar(凯撒加密)

凯撒加密是古罗马恺撒大帝用来保护重要军情的加密系统。

“恺撒密码”它是一种替代密码,通过将字母按顺序推后3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。

代码

# 判断密钥
def judge_key(k):if 0 < k < 27 and isinstance(k, int):return kelse:return 0def encipher(txt, k):result = ""if judge_key(k) == 0:result = "密钥应为[1,26]的整数"else:result = result + str(k) + ':'for i in txt:if i.isupper():result = result + chr(65 + (ord(i) - 65 + k) % 26)elif i.islower():result = result + chr(97 + (ord(i) - 97 + k) % 26)else:result = result + ireturn result# 返回所有偏移结果
def all_result(txt):res = []for n in range(1, 27):res.append(encipher(txt, n))return resdef rot13(txt):res = "rot" + encipher(txt, 13)return resif __name__ == '__main__':text=input("Please input the words : ")results = all_result(text)print(results)

输出:

Please input the words : Hello world
['1:Ifmmp xpsme', '2:Jgnnq yqtnf', '3:Khoor zruog', '4:Lipps asvph', '5:Mjqqt btwqi', '6:Nkrru cuxrj', '7:Olssv dvysk', '8:Pmttw ewztl', '9:Qnuux fxaum', '10:Rovvy gybvn', '11:Spwwz hzcwo', '12:Tqxxa iadxp', '13:Uryyb jbeyq','14:Vszzc kcfzr', '15:Wtaad ldgas', '16:Xubbe mehbt', '17:Yvccf nficu', '18:Zwddg ogjdv', '19:Axeeh phkew', '20:Byffi qilfx', '21:Czggj rjmgy', '22:Dahhk sknhz', '23:Ebiil tloia', '24:Fcjjm umpjb', '25:Gdkkn vnqkc', '26:Hello world']

5.Fence(栅栏加密)

所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)

代码:

# 栅栏范围
def get_field(txt):field = []for i in range(2, len(txt)):if len(txt) % i == 0:field.append(i)return fielddef encipher(txt, k):field = get_field(txt)txt_length = len(txt)if k in field:result = '' + str(k) + '栏:'for m in range(k):for n in range(m, txt_length, k):result = result + txt[n]else:result = '密钥有误,应在范围'+str(field)return result# 输出所有可能的结果
def all_result(txt):results = []for k in get_field(txt):results.append(encipher(txt, k))return resultsif __name__ == '__main__':text = 'Helloworld'print(encipher(text, 2))print(all_result(text))

输出:

2栏:Hloolelwrd
['2栏:Hloolelwrd', '5栏:Hweolrllod']

6.Fenham(费纳姆加密)

费纳姆密码其实是一种由二进制产生的替换密码。

是双方约定一个数,明文加上这个数就是密文。这个数相当于密钥(可以是单词 词组 句子 几个字母也行)。

'A': '1000001', 'B': '1000010', 'C': '1000011', 'D': '1000100', 'E': '1000101', 'F': '1000110',
'G': '1000111', 'H': '1001000', 'I': '1001001', 'J': '1001010', 'K': '1001011', 'L': '1001100',
'M': '1001101', 'N': '1001110', 'O': '1001111', 'P': '1010000', 'Q': '1010001', 'R': '1010010',
'S': '1010011', 'T': '1010100', 'U': '1010101', 'V': '1010110', 'W': '1010111', 'X': '1011000',
'Y': '1011001', 'Z': '1011010'

例如:
明文: hello=1001000 1000101 1001100 1001100 1001111
密钥:crude=1000011 1010010 1010101 1000100 1000101
异或得到密文=0001011 0010111 0011001 0001000 0001010

代码:

char_num = {'A': '1000001', 'B': '1000010', 'C': '1000011', 'D': '1000100', 'E': '1000101', 'F': '1000110','G': '1000111', 'H': '1001000', 'I': '1001001', 'J': '1001010', 'K': '1001011', 'L': '1001100','M': '1001101', 'N': '1001110', 'O': '1001111', 'P': '1010000', 'Q': '1010001', 'R': '1010010','S': '1010011', 'T': '1010100', 'U': '1010101', 'V': '1010110', 'W': '1010111', 'X': '1011000','Y': '1011001', 'Z': '1011010'}num_char = {'1000001': 'A', '1000010': 'B', '1000011': 'C', '1000100': 'D', '1000101': 'E', '1000110': 'F','1000111': 'G', '1001000': 'H', '1001001': 'I', '1001010': 'J', '1001011': 'K', '1001100': 'L','1001101': 'M', '1001110': 'N', '1001111': 'O', '1010000': 'P', '1010001': 'Q', '1010010': 'R','1010011': 'S', '1010100': 'T', '1010101': 'U', '1010110': 'V', '1010111': 'W', '1011000': 'X','1011001': 'Y', '1011010': 'Z'}# 转换
def txt_num(txt):txt = txt.upper()result = ""for i in txt:result = result + char_num[i]return result# 最终数字转换为字母
def num_list(txt):num = 0s = []while True:s.append(txt[num:num + 7])num += 7if num > len(txt) - 7:breakreturn s# 加密 文本内容
def encipher(txt, k):result = ''if txt.isalpha() and k.isalpha():txt = txt_num(txt)k = txt_num(k)j = len(k)for i in range(0, len(txt)):if txt[i] == k[i % j]:result += '0'else:result += '1'else:result = "明文与密钥应为纯字母"return result# 解密 文本为数字格式
def decipher(txt, k):result = ''if k.isalpha():k = txt_num(k)j = len(k)for i in range(0, len(txt)):if txt[i] == k[i % j]:result += '0'else:result += '1'result = num_list(result)result_char = ""for i in result:try:result_char = result_char + num_char[i]except KeyError:result_char = result_char + '?'result = result_charelse:result = "密钥应为纯字母"return resultif __name__ == '__main__':# 加解密text = '00010110010111001100100010000001010'# 读文本文件key = "crude"text_2 = "hello"print(encipher(text_2, key))print(decipher(text, key))

输出:

00010110010111001100100010000001010
HELLO

7.Morse(摩斯密码)

摩尔斯电码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号,是由美国人萨缪尔·摩尔斯在1836年发明。
每一个字符(字母或数字)对应不同的序列(由点和划组成)。
一般来说,任何一种能把书面字符用可变长度的信号表示的编码方式都可以称为摩尔斯电码。

'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.',
'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.',
'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 'Z': '--..','0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-',
'5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.','.': '.-.-.-', ':': '---...', ',': '--..--', ';': '-.-.-.', '?': '..--..',
'=': '-...-', "'": '.----.', '/': '-..-.', '!': '-.-.--', '-': '-....-',
'_': '..--.-', '"': '.-..-.', '(': '-.--.', ')': '-.--.-', '$': '...-..-',
'@': '.--.-.', '+': '.-.-.'

代码:

# "01"—>".-"
def translate_string(txt):table = ''.maketrans('01', '.-')txt = txt.translate(table)return txt# 文本->摩斯密码
def encipher(txt):result = ""morse_dict = {'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.','H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.','O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-','U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 'Z': '--..','0': '-----', '1': '.----', '2': '..---', '3': '...--', '4': '....-','5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.','.': '.-.-.-', ':': '---...', ',': '--..--', ';': '-.-.-.', '?': '..--..','=': '-...-', "'": '.----.', '/': '-..-.', '!': '-.-.--', '-': '-....-','_': '..--.-', '"': '.-..-.', '(': '-.--.', ')': '-.--.-', '$': '...-..-','@': '.--.-.', '+': '.-.-.'}txt = txt.upper()for i in txt:try:result = result + morse_dict[i] + '/'except KeyError:result = result + i + '/'return result.strip('/')# 摩斯密码—>文本
def decipher(txt, sign=" "):result = ""morse_dict = {".-": "A", "-...": "B", "-.-.": "C", "-..": "D", ".": "E", "..-.": "F", "--.": "G","....": "H", "..": "I", ".---": "J", "-.-": "K", ".-..": "L", "--": "M", "-.": "N","---": "O", ".--.": "P", "--.-": "Q", ".-.": "R", "...": "S", "-": "T","..-": "U", "...-": "V", ".--": "W", "-..-": "X", "-.--": "Y", "--..": "Z","-----": "0", ".----": "1", "..---": "2", "...--": "3", "....-": "4",".....": "5", "-....": "6", "--...": "7", "---..": "8", "----.": "9",".-.-.-": ".", "---...": ":", "--..--": ",", "-.-.-.": ";", "..--..": "?","-...-": "=", ".----.": "'", "-..-.": "/", "-.-.--": "!", "-....-": "-","..--.-": "_", ".-..-.": '"', "-.--.": "(", "-.--.-": ")", "...-..-": "$",".--.-.": "@", ".-.-.": "+",}# "0/1"->"./-"if '0' or '1' in txt:txt = translate_string(txt)# sign('/' or ' ')if '/' in txt:sign = '/'# 分割,字符串string,分割标识符signlists = txt.split(sign)for code in lists:try:result = result + morse_dict[code]except KeyError:result = result + "?"return resultif __name__ == "__main__":print(encipher("Hello world"))print(decipher('...././.-../.-../---/ /.--/---/.-./.-../-..'))

输出:

...././.-../.-../---/ /.--/---/.-./.-../-..
HELLO?WORLD

8.Pigen(猪圈加密)

猪圈密码(亦称朱高密码、共济会暗号、共济会密码或共济会员密码),是一种以格子为基础的简单替代式密码。即使使用符号,也不会影响密码分析,亦可用在其它替代式的方法。
猪圈加密
代码:

def encipher(txt):pigpen_dict = {'a': 'j', 'b': 'k', 'c': 'l', 'd': 'm', 'e': 'n', 'f': 'o', 'g': 'p', 'h': 'q', 'i': 'r','j': 'a', 'k': 'b', 'l': 'c', 'm': 'd', 'n': 'e', 'o': 'f', 'p': 'g', 'q': 'h', 'r': 'i','s': 'w', 't': 'x', 'u': 'y', 'v': 'z', 'w': 's', 'x': 't', 'y': 'u', 'z': 'v'}result = ""txt = txt.lower()for i in txt:try:result = result + pigpen_dict[i]except KeyError:result = result + ireturn resultif __name__ == '__main__':x = encipher("hello world")print(x)

输出:

qnccf sficm

9.Vigenere(维吉尼亚加密)

维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
在一个凯撒密码中,字母表中的每一字母都会作一定的偏移,例如偏移量为3时,A就转换为了D、B转换为了E……而维吉尼亚密码则是由一些偏移量不同的恺撒密码组成。
为了生成密码,需要使用表格法。这一表格(如图1所示)包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。
维吉尼亚密码
例如,假设明文为:
ATTACKATDAWN
选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:
LEMONLEMONLE
对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到:
明文:ATTACKATDAWN
密钥:LEMONLEMONLE
密文:LXFOPVEFRNHR

代码:

letter_list = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'  # 字母表# 根据输入的key生成key列表
def get_key_list(k):k_list = []for ch in k:k_list.append(ord(ch.upper()) - 65)return k_list# 加密
def encipher(txt, k):result = ""k_list = get_key_list(k)i = 0for ch in txt:  # 遍历明文if 0 == i % len(k_list):i = 0if ch.isalpha():  # 明文是否为字母,如果是,则判断大小写,分别进行加密if ch.isupper():result += letter_list[(ord(ch) - 65 + k_list[i]) % 26]i += 1else:result += letter_list[(ord(ch) - 97 + k_list[i]) % 26].lower()i += 1else:  # 如果密文不为字母,直接添加到密文字符串里result += chreturn result# 解密
def decipher(txt, k):result = ""k_list = get_key_list(k)i = 0for ch in txt:  # 遍历密文if 0 == i % len(k_list):i = 0if ch.isalpha():  # 密文为否为字母,如果是,则判断大小写,分别进行解密if ch.isupper():result += letter_list[(ord(ch) - 65 - k_list[i]) % 26]i += 1else:result += letter_list[(ord(ch) - 97 - k_list[i]) % 26].lower()i += 1else:  # 如果密文不为字母,直接添加到明文字符串里result += chreturn resultif __name__ == '__main__':key = 'computer'plaintext = "hello world"ciphertext = encipher(plaintext, key)print(ciphertext)ciphertext = 'jsxai psinr'plaintext = decipher(ciphertext, key)print(plaintext)

输出:

jsxai psinr
hello world

http://chatgpt.dhexx.cn/article/9IVPWRFG.shtml

相关文章

古典密码学

主要划分方式及其分类 按密钥方式划分&#xff1a;对称&#xff0c;非对称 按明文处理方式分&#xff1a;块密码&#xff0c;流密码 按编制原理划分&#xff1a;代换&#xff0c;置乱 对称加密算法 对称加密算法 对称加密算法&#xff08;synmetric algorithm&#xff09;&…

古典密码总结

古典密码 凯撒密码凯撒位移&#xff08;中文版&#xff09; 栅栏密码棋盘密码乘法密码仿射密码希尔密码摩斯电码猪圈密码键盘密码参考 凯撒密码 加密公式&#xff1a;密文 (明文 位移数) Mod 26 解密公式&#xff1a;明文 (密文 - 位移数) Mod 26 凯撒位移&#xff08;中…

古典密码(部分合集)

古典密码 一. 移位密码1. 简单移位密码2. 曲路密码3. 云影密码4. 栅栏密码 二. 代替密码单表代替密码1.凯撒密码2.ROT133.埃特巴什密码4.经典单表替代密码5.摩斯密码6.培根密码7.图形替换密码猪圈密码圣堂武士密码标准银河密码 8.仿射密码 多表代替密码1.棋盘密码PlayfairPolyb…

密码学:古典密码.

密码学&#xff1a;古典密码. 古典密码是密码学的一个类型&#xff0c;大部分加密方式是利用替换式密码或移项式密码&#xff0c;有时是两者的混合。古典密码在历史上普遍被使用&#xff0c;但到现代已经渐渐不常用了。一般来说&#xff0c;一种古典密码体制包含一个字母表(如…

古典密码汇总。

一、密码类型汇总 23、维吉尼亚密码&#xff08;Vigenre Cipher&#xff09; 【Vigenre Cipher】 由于频率分析法可以有效的破解单表替换密码&#xff0c;法国密码学家维吉尼亚于1586年提出一种多表替换密码&#xff0c;   即维吉尼亚密码&#xff0c;也称维热纳尔密码。维…

SourceTree的使用

SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端&#xff0c;拥有可视化界面&#xff0c;容易上手操作。同时它也是Mercurial和Subversion版本控制系统工具。支持创建、提交、clone、push、pull 和merge等操作。 二、下载安装SourceTree步骤 1、下载地址&#xf…

SourceTree使用教程图文详解

作者的其他平台&#xff1a; | CSDN&#xff1a;https://blog.csdn.net/qq_41153943 | 掘金&#xff1a;https://juejin.cn/user/651387938290686 | 知乎&#xff1a;https://www.zhihu.com/people/1024-paper-96 | GitHub&#xff1a;https://github.com/JiangXia-1024?t…

Sourcetree打开之后,闪退,问题处理

1、环境&#xff1a;win11 Sourcetree版本3.4.7 2、处理办法&#xff0c;在资源管理器地址栏输入“%LocalAppData%\Atlassian”&#xff0c;删掉“SourceTree.exe_Url_ampbpf5kvqim4xxkhaykobjynfannkxz”&#xff08;非SourceTree目录&#xff09;&#xff0c;打开正常。

Sourcetree查看某个文件提交历史记录

1、在文件状态右上角搜索要查看的文件名 2、选择查看的文件名右键 点击变更历史即可

sourcetree使用

由于在工作中负责线上代码的部署和控制&#xff0c;所以对SourceTree的使用场景和使用技巧进行了全面系统的研究和实践&#xff0c;并以经验连载的形式进行了分享。该经验主要是对这些连载经验进行整体的概述&#xff0c;以方便大家的查阅和参考。 方法/步骤 SourceTree使用的…

sourceTree打不开,启动闪退

应该还是缓存文件的问题&#xff1a; C:\Users\wangqiang\AppData\Local\Atlassian 把这个临时文件删掉&#xff1a;

sourcetree使用说明

功能全面介绍 OK,拔山涉水终于安装完毕,进入主页是长这个样子 1.主页 几个按钮作用:如图,其中过滤仓库搜索框其实就是个搜索框,可以根据仓库名字的关键字搜索出仓库,右上角的设置按钮比较简单这里就不再解释大家自行点开一下就明白了 Snip20171208_22.png 新建按钮解释 Sni…

SourceTree解决冲突

1、解决冲突的时候&#xff0c;操作已暂存文件&#xff0c;不操作未暂存文件&#xff08;开始的时候&#xff0c;这两个区域的文件是一样的&#xff0c;并且都带有感叹号提示&#xff09; 2、使用他人版本解决冲突&#xff0c;会自动将当前分支对应文档更改成他人文档内容&…

Sourcetree 打开闪退怎么处理

只需要把 C:\Users\15810\AppData\Local\Atlassian 文件下用箭头标记的删除即可

Sourcetree 闪退问题

Sourcetree&#xff0c;有时我们用着用着就用不了&#xff0c;昨天好好的&#xff0c;今天就不能打开了。我遇到这个问题也找找了好多博文看了&#xff0c;也操作。还重新安装还是重新这样。后面发现麻痹的&#xff0c;这软件的打开的权限被限制了。 找到上面的位置&#xff0c…

Git和SourceTree入门教程

转自CSDN:http://blog.csdn.net/collonn/article/details/39259227 -->本教程适用于主流的开源网站github和bitbucket,个人认为sourceTree还是比较好用的git客户端,支持windows和mac os。 -->soureceTree的最新版本可能与此教程的screenshot有些许不同,但大同小异…

SourceTree使用方法

一 、SourceTree简介 SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端&#xff0c;拥有可视化界面&#xff0c;容易上手操作。同时它也是Mercurial和Subversion版本控制系统工具。支持创建、提交、clone、push、pull 和merge等操作。 二、下载安装SourceTree步骤…

Sourcetree使用教程,拉取代码克隆、解决冲突、合并分支

目录 基础配置 基础操作 拉取远程项目 pull(拉取)、commit(提交) 、push(推送) 新建分支 合并分支 Git工作流 冲突解决 配置忽略文件 SourceTree&Git部分名词解释 其他待补充 博客链接&#xff1a;Sourcetree使用教程https://www.zjhuiwan.cn/info/20211014/422…

Git(5) SourceTree安装使用

文章目录 一、前言二、SourceTree安装三、SourceTree使用1、克隆仓库&拉取代码&推送代码2、创建分支&合并分支代码3、标签4、子模块5、子树6、贮藏7、重置提交a、软合并&#xff1a;保持所有本地改动b、混合合并&#xff1a;保持工作副本并重置索引c、强行合并&…

【全网最全面】SourceTree使用教程详解(连接远程仓库,克隆,拉取,提交,推送,新建/切换/合并分支,冲突解决,提交PR)...

前言&#xff1a; 俗话说的好工欲善其事必先利其器&#xff0c;Git分布式版本控制系统是我们日常开发中不可或缺的。目前市面上比较流行的Git可视化管理工具有SourceTree、Github Desktop、TortoiseGit&#xff0c;综合网上的一些文章分析和自己的日常开发实践心得个人比较推荐…