JS中常见编码及加密方式解析
在JS中,常见的编码方式有:URL编码、Base64编码、HEX编码;常见的加密方式有:MD5加密、SHA1加密、对称加密和非对称加密。
本文将一一为您详细讲解,并提供相应的示例。
URL编码
URL编码是一种在网络上传输数据的编码方式,需要将数据中的特殊字符进行编码,以便网络进行传输和识别。在JS中我们可以使用encodeURI()函数和encodeURIComponent()函数分别对URL和URL参数进行编码。
示例:
var url = "http://www.example.com?key=value&name=张三";
var encodedURL = encodeURI(url)
console.log(encodedURL); //"http://www.example.com?key=value&name=%E5%BC%A0%E4%B8%89"
var param = "我是参数!";
var encodedParam = encodeURIComponent(param)
console.log(encodedParam); //"我%E6%98%AF%E5%8F%82%E6%95%B0%EF%BC%81"
Base64编码
Base64编码是一种将数据进行编码以便在网络上传输的方式,它可以将二进制数据转换为纯文本格式,常见于图片、音视频等二进制数据和一些加密算法中。
示例:
var originStr = "Hello, I am a base64 string.";
var encodedStr = btoa(originStr);
console.log(encodedStr); // "SGVsbG8sIEkgYW0gYSBiYXNlNjQgc3RyaW5nLg=="
var decodedStr = atob(encodedStr);
console.log(decodedStr); // "Hello, I am a base64 string."
HEX编码
HEX编码是一种将二进制数据转换成16进制形式的编码方式,由于16进制的字符集较为简单(只有0-9、A-F),因此可以减少数据发送的大小,常见的应用包括hash算法等。
示例:
var originStr = "Hello, I am a hex string.";
var encodedStr = "";
for (var i = 0; i < originStr.length; i++) {
encodedStr += originStr.charCodeAt(i).toString(16);
}
console.log(encodedStr); // "48656c6c6f2c204920616d20612068657820737472696e672e"
var decodedStr = "";
for (var i = 0; i < encodedStr.length; i += 2) {
var charCode = parseInt(encodedStr.substr(i, 2), 16);
decodedStr += String.fromCharCode(charCode);
}
console.log(decodedStr); // "Hello, I am a hex string."
MD5加密
MD5是一种常见的加密算法,常用于检验信息传输完整性和防止数据被篡改。由于MD5是一种不可逆算法,因此可以用于对于密码等敏感信息的存储。
示例:
var originStr = "I am a string.";
var encodedStr = CryptoJS.MD5(originStr).toString();
console.log(encodedStr); // "8f9f8765dbcf5cb37a3595d7375c841b"
SHA1加密
SHA1也是一种常见的加密算法,常用于数字签名、数字证书、SSL通信等方面。同样,SHA1也是一种不可逆算法。
示例:
var originStr = "I am a string.";
var encodedStr = CryptoJS.SHA1(originStr).toString();
console.log(encodedStr); // "ebed656a941bcb0f38bf67c7368b1332b06abc53"
对称加密
对称加密是一种加密方式,使用的加密与解密算法相同,因此常用于保护隐私、认证、授权等操作。
示例:
var key = CryptoJS.enc.Hex.parse('000102030405060708090a0b0c0d0e0f');
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
var plainText = '我爱编程!';
var encrypted = CryptoJS.AES.encrypt(plainText, key, {iv: iv});
console.log(encrypted.toString());
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {iv: iv});
console.log(decrypted.toString(CryptoJS.enc.Utf8));
非对称加密
非对称加密是一种加密方式,采用的是公钥和私钥两种密钥。通常采用公钥加密、私钥解密的方式进行加密,或者私钥加密、公钥解密的方式进行数字签名等操作。
示例:
var ecPrivateKey = '-----BEGIN PRIVATE KEY-----\n' +
'MHcCAQEEINkpJuwm2mtLcW6Q/4CboeCRRAsPEO93WDzW12Jf+oXHoAoGCCqGSM49\n' +
'AwEHoUQDQgAE/JIJpIMdzM5E7Hc/ef+ZmpN/3z1TpanXyFWh1vJp07gNNGUT9Z5J\n' +
'xUc1Mywoj4C26qgH4EcH9Z9OgrzlnGY3w==\n' +
'-----END PRIVATE KEY-----';
var ecPublicKey = '-----BEGIN PUBLIC KEY-----\n' +
'MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/JIJpIMdzM5E7Hc/ef+ZmpN/3z1T\n' +
'panXyFWh1vJp07gNNGUT9Z5JxUc1Mywoj4C26qgH4EcH9Z9OgrzlnGY3w==\n' +
'-----END PUBLIC KEY-----';
var ecParams = {
key: ecPrivateKey,
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: '123456'
};
var plainText = "hello world!";
// 加密
var encrypted = CryptoJS.Crypto.encrypt("ECC", plainText, ecParams, {pubkey: ecPublicKey});
console.log(encrypted.toString());
// 解密
var decrypted = CryptoJS.Crypto.decrypt("ECC", encrypted, ecParams);
console.log(decrypted.toString(CryptoJS.enc.Utf8));
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中常见编码及加密方式解析 - Python技术站