随波逐流工作室—-探索前沿科技,分享最新软件。点击标题下蓝字“长弓三皮”关注,我们将为您提供有深度、有价值、有意思的阅读。
朋友们,现在只对常读和星标的公众号才展示大图推送,建议大家把长弓三皮“设为星标”,否则可能就看不到了啦!
作者:随波逐流
生活如梦,我愿随风起,随波流,享受每一刻的自在与轻盈。
字密1 菜单
正如摩尔斯电码是源于电报,博多码也是因电报而生,而最早使用博多码的正是『博多式电报机』。
『 博多式电报机 』由 Emile Baudot 发明,也得名于此, Baudot code 则是博多式电报机所使用的编码,使用 5 个 bit 进行编码,包含了两个字符集。其实应当称之为 5 波特( baud )更为合适。
博多baudot解密:
执行路径:[随波逐流]CTF编码工具--字密1--博多baudot解密
文本框输入密文,结果区输出明文。
密文:
00110 10010 11000 11110 00001 00101 11001 10001 10010
解密结果:ILOVESBZL
博多编码(Baudot Code),也称为Baudot电码,是一种早期的字符编码系统,由法国工程师埃米尔·博多(Émile Baudot)在1870年代发明,并在1874年获得专利。这种编码系统主要用于电报通信,它标志着从手动电报到自动电传打字机的转变,对19世纪末和20世纪初的远程通信产生了革命性的影响。
编码特点
- 五位定长编码
:博多编码使用五位二进制数(bits)来表示每个字符,这使得它能够编码32个不同的状态,包括26个字母、数字和标点符号。 - 二元编码
:博多编码是一种二元编码,使用交叉(代表1)和点(代表0)来表示信息。 - 字符集切换
:博多编码允许在字母和数字之间切换,这种灵活性是其特点之一。 - 控制字符
:博多编码包含了一些控制字符,如行结束(Line Feed, LF)和回车(Carriage Return, CR)。
编码表
博多编码表由5位二进制数组成,每个二进制数对应一个字符或控制信号。例如,二进制数00000
代表空格(Blank),而01001
代表字母T或数字5,具体取决于当前的模式(字母或数字)。
历史意义
- 电信行业的先驱
:博多编码是电信行业中第一个广泛使用的固定长度字符编码,它的出现为后来的ITA2和ASCII编码奠定了基础。 - 提高通信效率
:博多编码相较于莫尔斯电码,能够更高效地编码字符,允许更快的消息传输。
现代应用
尽管博多编码在现代通信中已不再使用,但它在历史上的重要性不容忽视。它不仅促进了电信技术的发展,还在艺术和流行文化中留下了印记,比如Coldplay乐队在其专辑《X&Y》的封面上使用了博多编码。
博多编码是电信史上的一个重要里程碑,它的发展和应用对现代通信技术产生了深远的影响。
在CTF中一般使用python解码
# !/usr/bin/env python
# -*- coding:utf-8-*-
# @Author :随波逐流
# Baudot码公用字典
BAUDOT_LETTERS_ITA1 = [
'*NUL*', 'A', 'E', 'r', 'Y', 'U', 'I', 'O', '*FIGURES*', 'J', 'G', 'H', 'B', 'C', 'F', 'D', ' ',
'n', 'X', 'Z', 'S', 'T', 'W', 'V', '*DEL*', 'K', 'M', 'L', 'R', 'Q', 'N', 'P'
]
BAUDOT_FIGURES_ITA1 = [
'*NUL*', '1', '2', 'r', '3', '4', '', '5', ' ', '6', '7', '+', '8', '9', '', '0',
'*LETTERS*', 'n', ',', ':', '.', '', '?', "'", '*DEL*', '(', ')', '=', '-', '/', '', '%'
]
BAUDOT_LETTERS_ITA2 = [
'*NUL*', 'E', 'n', 'A', ' ', 'S', 'I', 'U', 'r', 'D', 'R', 'J', 'N', 'F', 'C', 'K', 'T',
'Z', 'L', 'W', 'H', 'Y', 'P', 'Q', 'O', 'B', 'G', '*FIGURES*', 'M', 'X', 'V', '*LETTERS*'
]
BAUDOT_FIGURES_ITA2 = [
'*NUL*', '3', 'n', '-', ' ', "'", '8', '7', 'r', '*ENQUIRY*', '4', '*BELL*', ',', '!', ':', '(',
'5', '+', ')', '2', '$', '6', '0', '1', '9', '?', '&', '*FIGURES*', '.', '/', ';', '*LETTERS*'
]
# Baudot码加密
def baudot_encrypt(plaintext, variant='ita2'):
letters = BAUDOT_LETTERS_ITA1 if variant =='ita1'else BAUDOT_LETTERS_ITA2
figures = BAUDOT_FIGURES_ITA1 if variant =='ita1'else BAUDOT_FIGURES_ITA2
figure_mode =False
switch_to_letters ='10000' if variant =='ita1'else'11111'
switch_to_figures ='01000' if variant =='ita1'else'11011'
dst =''
sep =''
forcharin plaintext:
index = letters.index(char.upper()) if char.upper() in letters else-1
if index !=-1:
if figure_mode:
figure_mode =False
dst += sep + switch_to_letters +' '
sep =' '
else:
index = figures.index(char.upper()) if char.upper() in figures else-1
if index !=-1:
if not figure_mode:
figure_mode =True
dst += sep + switch_to_figures +' '
sep =' '
if index !=-1:
dst += sep + ('0000'+ bin(index)[2:])[-5:]
sep =' '
return dst
# Baudot码解密
def baudot_decrypt(ciphertext, variant='ita2'):
letters = BAUDOT_LETTERS_ITA1 if variant =='ita1'else BAUDOT_LETTERS_ITA2
figures = BAUDOT_FIGURES_ITA1 if variant =='ita1'else BAUDOT_FIGURES_ITA2
figure_mode =False
switch_to_letters =16 if variant =='ita1'else31
switch_to_figures =8 if variant =='ita1'else27
dst =''
if ' 'in ciphertext:
ciphertext = ciphertext.replace(' ', '')
for i inrange(0, len(ciphertext), 5):
index =int(ciphertext[i:i+5], 2)
if index == switch_to_figures:
figure_mode =True
elif index == switch_to_letters:
figure_mode =False
else:
if figure_mode:
dst += figures[index]
else:
dst += letters[index]
return dst
# 测试代码
if __name__ =='__main__':
plaintext ='flag'
variant ='ita2'
encrypted_text = baudot_encrypt(plaintext, variant)
print('Encrypted Baudot Code: %s'% encrypted_text)
decrypted_text = baudot_decrypt(encrypted_text, variant)
print('Decrypted Text: %s'% decrypted_text)
你若喜欢,为“长弓三皮”点个赞和在看哦
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...