CTF 密码-编码

1.hex

hex是最常用的编码方式之一,这一点非常容易理解,就是将信息转化为十六进制。要进行各类编码的转换,或者是要将信息在计算机储存中最为本质的一面表现出来的时候,都可以使用hex编码方式

使用py进行hex的变换,代码如下: 

a=12345
hex_s=hex(s)  #hex函数只接受整数
print(hex_s)

s='asfaew'
hex_s=bytes(s,'utf-8').hex()
print(hex_s)

可以看到hex()确实可以把整数转为16进制形式的字符串,但是有点美中不足,如A~F字符只能是小写,数字是16以下就会只占一个位置,有时打印多个数据,希望整齐划一都占2个位置,这就无法满足需求了。这时可以使用format()方法。

data = 125
str='0x{:02X}'.format(data)
# str='0x{:02x}'.format(data) 这时输出的16进制字符串中的字母是小写
print(str)

将字符串转换为16进制字符串后就可以进一步将其转换为10进制数了 

s='fsfdfsdaf'
int_s=int(bytes(s,'utf-8').hex(),16)
print(int_s)

 实现16进制字符串转换为ascii字符串

way1

import binascii

def hexStr_to_str(hex_str):
    hex = hex_str.encode('utf-8')
    str_bin = binascii.unhexlify(hex)
    return str_bin.decode('utf-8')

num=144388484112973930407486049
print( hexStr_to_str(hex(num)[2:]) )

way2 

import base64

num=144388484112973930407486049
print(base64.b16decode(hex(num)[2:].upper()).decode())

 下面是一个可以查询ascii的网址 (可以验证一下转换成16进制是否正确)

 ASCII码 - 基本ASCII码和扩展ASCII码,最全的ASCII码对照表 (asciim.cn)

bytes与字符串相互转化

中途遇到的问题: 

字面上意思:就是 str 不可以被系统调用,其实原因就是:你正在调用一个不能被调用的变量或对象,具体表现就是你调用函数、变量的方式错误.所以,这个错误想表达的就是: str ()是系统自带的,你不能在用它的时候自己同时定义一个别的叫做 str 的变量,这样会冲突. 

另外,代码编辑器在之前执行的代码中已经定义了str变量,但是执行之后全局变量没有被清空,即使在当前代码中没有定义str变量,在使用str( )函数时仍然会提示该错误。这种隐含的错误很容易被忽略,我们重启编辑器就可以解决这个问题  

或者点击他

回归正题 

# bytes转字符串方式一
b=b'\xe5\x8e\x9f\xe7\xa5\x9e'
s=str(b,'utf-8')
print(s)

# bytes转字符串方式二
s=b.decode() # 第一参数默认utf8,第二参数默认strict
print(s)

# bytes转字符串方式三
s=b.decode('utf-8','ignore') # 忽略非法字符,用strict会抛出异常
print(s)

# bytes转字符串方式四
s=b.decode('utf-8','replace') # 用?取代非法字符
print(s)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值