Правила кодирования, ограничивающие длину строк, частично предназначены для того, чтобы сделать код более читабельным. В вашем случае цепных вызовов методов, значение не ясно. Вам следует выбрать временные имена переменных для промежуточных значений, чтобы читатель кода мог легко понять цепочку.
Один пример может быть:
safe_md5 = hashlib.md5(salt + password)
crypto_hash = safe_md5.digest()
hash_correct = crypto_hash.encode('base64')
Это ведет читателя по садовой тропе к пониманию. Очень мало теряется в производительности, и весь дополнительный код добавляется специально.