随笔 - 16  文章 - 0  评论 - 5  阅读 - 904

esp加密

ESP协议详解-CSDN博客

IPsec ESP AES-GCM_ipsec中esp加密算法aes-gcm-CSDN博客

 

 

比如这里原始data有

<IP  version=4 ihl=5 tos=0x0 len=20 id=1 flags= frag=0 ttl=64 proto=ip chksum=0x2784 src=192.168.105.10 dst=192.168.105.10 |>

有20个数据 因为payload为空

data_len = len(esp.data) + 2  加两个就是22

# according to the RFC4303, section 2.4. Padding (for Encryption)
# the size of the ESP payload must be a multiple of 32 bits
align = _lcm(self.block_size, 4)  这里求16跟4的最小公倍数 就是16

# pad for block size
esp.padlen = -data_len % align  算出  padlen等于16*2-22=10

 那填充就有

b'\x01\x02\x03\x04\x05\x06\x07\x08\t\n'

最后变成

<_ESPPlain  spi=0x5 seq=1 iv='%z\xa0\x90\x12d\x9c\\' data=<IP  version=4 ihl=5 tos=0x0 len=20 id=1 flags= frag=0 ttl=64 proto=ip chksum=0x2784 src=192.168.105.10 dst=192.168.105.10 |> padding='\x01\x02\x03\x04\x05\x06\x07\x08\t\n' padlen=10 nh=4 |>

 

from scapy.all import *
from scapy.layers.ipsec import *
from scapy.layers.l2 import *


def main(argv):
payload = 'test-' * 2000

sa = SecurityAssociation(ESP, spi=5, crypt_algo='AES-GCM',
crypt_key=b'\x49\x2e\x8f\xfe\x71\x8a\x95\xa0\x0c\x18\x93\xea\x61\xaf\xc6\x49\x97\xf4\x73\x28\x48\xcc\xfe\x6e\xa0\x7d\xb4\x83\x17\x5c\xb1\x8d\xe9\xae\x41\x1a',
auth_algo='NULL', auth_key=None,)
sa.crypt_algo.icv_size = 16


p = IP(src='192.168.105.10', dst='192.168.105.10')
e = sa.encrypt(p,iv=b'\xad\xf73g\x80\xea\xbb\xa1')


if __name__ == "__main__":
exit(main(sys.argv[1:]))

 

posted on   vanness_205  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示