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 2025-02-11 23:27  vanness_205  阅读(30)  评论(0)    收藏  举报