随波逐流工作室—-探索前沿科技,分享最新软件。点击标题下蓝字“长弓三皮”关注,我们将为您提供有深度、有价值、有意思的阅读。
朋友们,现在只对常读和星标的公众号才展示大图推送,建议大家把长弓三皮“设为星标”,否则可能就看不到了啦!
作者:随波逐流
生活如梦,我愿随风起,随波流,享受每一刻的自在与轻盈。
Base/Rot菜单
Base58加密:
执行路径:[随波逐流]CTF编码工具--Base/Rot--Base58加密
文本框输入明文,结果区输出密文。
明文:I_love_sbzl
base58:KCHdwag1RJSmCSf
base58 BTC:jchCWzF1qirLcrE
Base85a解密:
执行路径:[随波逐流]CTF编码工具--Base/Rot--Base58解密
文本框输入密文,结果区输出明文。
密文:
base58:KCHdwag1RJSmCSf
base58 BTC:jchCWzF1qirLcrE
Base58是一种基于58个字符的编码方案,它被设计用来表示数字。与Base64不同,Base58不使用数字0、字母O、字母I和字母l,以避免混淆。Base58编码通常用于比特币地址和QR码中,因为它的字符集没有视觉上容易混淆的字符,这使得编码后的字符串更容易阅读和手动输入。
Base58 编码字符集
Base58编码使用的字符集包括:
大写字母:A-Z(25个)
小写字母:a-z(25个)
数字:0-9(10个)
排除了容易混淆的字符:0(数字零)、O(大写字母O)、I(大写字母i)和l(小写字母L)
这样,Base58总共使用了58个字符。
ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz123456789
编码过程
将数字转换为基数10的整数:首先,将需要编码的二进制数据或数字转换为基数10的整数。
除以58:然后,将这个整数除以58,得到商和余数。余数就是编码字符集中的一个字符。
重复这个过程:继续用商除以58,直到商为0。每次得到的余数都是编码字符串中的一个字符。
拼接字符:将得到的字符从后向前拼接,形成最终的Base58编码字符串。
处理前导零:如果原始二进制数据以零字节开头,需要在编码字符串的开头添加一个字符集的第一个字符(通常是'1'),以避免编码字符串以零开头,这可能导致解码时的混淆。
解码过程
解码过程是编码过程的逆过程:
将字符转换为数值:首先,将Base58编码的每个字符转换为对应的数值。
乘以58的幂:然后,将这些数值乘以58的相应幂次方,并将结果相加,得到原始的基数10整数。
转换为二进制数据:最后,将这个整数转换回原始的二进制数据。
Base58 的特点
紧凑性:Base58编码的数据比Base64更紧凑,因为它使用了更少的字符。
安全性:由于不包含容易混淆的字符,Base58编码的数据更安全,减少了因字符混淆导致的错误。
易读性:Base58编码的数据易于阅读和手动输入,适合用于需要用户交互的场景。
Base58 的应用
Base58编码最常见的应用是在比特币和其他加密货币的地址系统中。比特币地址使用Base58来编码公钥或私钥的哈希值,以确保地址的易读性和安全性。此外,Base58也用于其他需要编码数字的场景,如某些类型的票据系统和二维码。
Base58和Base58check(通常简称为Base58 BTC,因为比特币使用这种编码方式)都是编码方法,它们都基于58个字符的编码系统,但是它们之间存在一些差异。Base58check是Base58的一个变种,它增加了一些额外的特性,主要用于比特币和其他加密货币系统中。
Base58check(Base58 BTC)
Base58check是Base58的一个扩展,它增加了两个重要的特性:
版本字节(Version Byte):在编码的字符串前添加一个版本字节,用于区分不同类型的数据。例如,在比特币地址中,版本字节用于区分主网地址和测试网地址。
校验和(Checksum):在编码的字符串后添加一个或多个校验和字节,用于检测编码数据的完整性。校验和是通过计算原始数据的哈希值并取其前几个字节来生成的。这使得Base58check编码的数据具有一定的错误检测能力。
编码过程的区别
Base58:直接将二进制数据编码为Base58字符串。
Base58check:首先在二进制数据前添加一个版本字节,然后计算整个数据(包括版本字节)的哈希值,并取哈希值的前几个字节作为校验和,将校验和附加到数据后面,最后将整个数据(包括版本字节和校验和)编码为Base58字符串。
解码过程的区别
Base58:直接将Base58字符串解码为二进制数据。
Base58check:首先将Base58字符串解码为二进制数据,然后提取版本字节和校验和,验证校验和的正确性,如果校验和不正确,则表示数据在传输过程中可能已经损坏。
应用场景
Base58:适用于需要将二进制数据编码为文本形式的场景,但不要求数据完整性校验。
Base58check:适用于需要数据完整性校验的场景,如加密货币地址、票据系统等。
总结来说,Base58check在Base58的基础上增加了版本控制和错误检测机制,使其更适合用于需要高度安全性和数据完整性的应用场景。
在CTF中一般使用python的base58库进行加解码
from base58 import b58encode, b58decode
def base58_encode(data):
"""将字节数据编码为Base58格式"""
return b58encode(data).decode('utf-8')
def base58_decode(data):
"""将Base58格式的数据解码为字节"""
return b58decode(data).decode('utf-8')
def base58btc_encode(data):
"""将字节数据编码为Base58check(Base58 BTC)格式"""
# Base58check编码需要添加一个版本字节,这里以0x01为例
version_byte = b'x01'
payload = version_byte + data
checksum = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4]
return b58encode(payload + checksum).decode('utf-8')
def base58btc_decode(data):
"""将Base58check(Base58 BTC)格式的数据解码为字节"""
decoded_data = b58decode(data)
payload_with_checksum = decoded_data
payload = payload_with_checksum[:-4]
checksum = payload_with_checksum[-4:]
payload_hash = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4]
if checksum != payload_hash:
raise ValueError("Invalid checksum")
version_byte = payload[:1]
payload = payload[1:]
return version_byte + payload
# 使用示例
if __name__ == "__main__":
original_bytes = b"Hello, World!"
print("Original Bytes:", original_bytes)
# Base58 编码和解码
encoded_string = base58_encode(original_bytes)
print("Base58 Encoded:", encoded_string)
decoded_bytes = base58_decode(encoded_string)
print("Base58 Decoded:", decoded_bytes)
# Base58check 编码和解码
encoded_btc_string = base58btc_encode(original_bytes)
print("Base58check Encoded:", encoded_btc_string)
decoded_btc_bytes = base58btc_decode(encoded_btc_string)
print("Base58check Decoded:", decoded_btc_bytes)
公众号内回复 writeup 或 flag 下载公众号文章
你若喜欢,为“长弓三皮”点个赞和在看哦
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...