对于实际的 SRTP 加密/解密,您可以使用 pylibsrtp:
https://pypi.python.org/pypi/pylibsrtp
DTLS 握手(产生 SRTP 主密钥)比较棘手,但 pyOpenSSL 应该很快就有必要的绑定来启用 SRTP 扩展:
https://github.com/pyca/pyopenssl/pull/734
一旦可用,您将能够提取生成密钥材料:
SRTP_KEY_LEN = 16
SRTP_SALT_LEN = 14
def get_srtp_key_salt(src, idx):
key_start = idx * SRTP_KEY_LEN
salt_start = 2 * SRTP_KEY_LEN + idx * SRTP_SALT_LEN
return (
src[key_start:key_start + SRTP_KEY_LEN] +
src[salt_start:salt_start + SRTP_SALT_LEN]
)
material = connection.export_keying_material(
b'EXTRACTOR-dtls_srtp',
2 * (SRTP_KEY_LEN + SRTP_SALT_LEN))
if is_server:
srtp_tx_key = get_srtp_key_salt(material, 1)
srtp_rx_key = get_srtp_key_salt(material, 0)
else:
srtp_tx_key = get_srtp_key_salt(material, 0)
srtp_rx_key = get_srtp_key_salt(material, 1)