简介:本文详细解析了base64、Unicode、escape、URL/HEX编码,md5、sha、hmac哈希,rsa、aes、des、sm加密,PBKDF2密钥派生,以及js混淆等加密解密技术,为开发者提供全面技术指南。
base64是一种基于64个可打印字符来表示二进制数据的编码方式,广泛应用于邮件传输、HTTP请求等场景。它通过将每3个字节(24位)拆分为4个6位组,再映射到base64字符表,实现二进制到文本的无损转换。例如,字符串”abc”的base64编码为YWJj。
Unicode作为全球字符编码标准,解决了多语言文本的统一表示问题。UTF-8作为其最常用的实现,通过1-4个字节动态编码字符,既兼容ASCII,又支持中文、日文等复杂字符集。在Web开发中,正确处理Unicode编码是避免乱码的关键。
escape是JavaScript早期的字符串转义方法,将非ASCII字符转换为%uXXXX格式,但已被encodeURIComponent取代。URL编码(如%20表示空格)和HEX编码(如\x41表示’A’)则用于安全传输特殊字符,防止解析歧义。例如,URL中的空格需编码为%20,而非直接传输。
md5生成128位(16字节)哈希值,曾广泛用于密码存储和文件校验,但因碰撞漏洞已不推荐用于安全场景。sha系列(sha-1、sha-256、sha-512)提供更长的哈希值(160-512位),其中sha-256是区块链、数字证书等领域的标准选择。例如,计算字符串”hello”的sha-256哈希:
import hashlibhash_obj = hashlib.sha256(b"hello")print(hash_obj.hexdigest()) # 输出: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hmac(基于哈希的消息认证码)通过结合密钥和哈希算法(如sha-256),验证消息完整性和发送者身份。其核心公式为:hmac = hash(key + hash(key + message))。在API签名中,hmac可防止请求篡改。
rsa基于大数分解难题,使用公钥加密、私钥解密(或反之签名)。例如,A用B的公钥加密消息,只有B的私钥能解密,确保机密性。生成RSA密钥对的Python示例:
from Crypto.PublicKey import RSAkey = RSA.generate(2048)private_key = key.export_key()public_key = key.publickey().export_key()
sm2(非对称)、sm3(哈希)、sm4(对称)是中国国家密码管理局发布的国密算法,在金融、政务领域广泛应用。sm2的加密效率优于RSA,sm3的哈希长度固定为256位,sm4作为分组密码,支持128位密钥。
des因56位密钥过短已被淘汰,3des通过三次加密增强安全性,但性能较差。aes(高级加密标准)支持128/192/256位密钥,是当前对称加密的首选。例如,用aes-256加密数据:
from Crypto.Cipher import AESfrom Crypto.Random import get_random_byteskey = get_random_bytes(32) # 256位密钥cipher = AES.new(key, AES.MODE_GCM)ciphertext, tag = cipher.encrypt_and_digest(b"Secret Data")
PBKDF2通过多次哈希(如10万次)和盐值(salt)从密码派生密钥,抵御暴力破解。在存储密码时,应使用PBKDF2而非直接存储明文:
import hashlibimport binasciidef derive_key(password, salt, iterations=100000):return hashlib.pbkdf2_hmac('sha256', password.encode(), salt, iterations)salt = binascii.hexlify(os.urandom(16))key = derive_key("my_password", salt)
JS混淆通过变量重命名、字符串加密、控制流扁平化等技术,增加逆向工程难度。例如,将function log() { console.log("Hi"); }混淆为:
var _0x1a2b=['log','Hi'];function _0x3c4d(){console[_0x1a2b[0]](_0x1a2b[1]);}
工具如UglifyJS、JavaScript Obfuscator可自动化此过程,但需平衡可读性与安全性。
加密解密技术是信息安全的核心,开发者需根据场景选择合适算法,并持续关注漏洞更新(如sha-1碰撞、rsa小指数攻击)。通过合理组合编码、哈希、加密和混淆技术,可构建多层次的安全防护体系。