var t = new Dn; return t.setPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjWfCb9IR5pMheXLUHCQko8VddGGDZ2jN0Edj/yQoXl91plE6r/muh1oKeuWtSpDwqDDAO5s3lHYfPFb45eWTky0a4ijOBlGbls5WJBQqoqD3gYTPcZyc1KFmn9wRTbNLMFhWN2kCHzo6YOO9kRcCQdAuXaj2sxFrirdglL8v7I0gp0n2ME+3V4Jwiv86cL24t6DfzxHqW/CO7Q/7P6bE5xVZHkuup7J1vXrjewN0r9nXovmahYlLIop4QuWC6zDVHDSTk/SXifHJBidOgEWHKgQSC5FS3xism5bth8XKWu4WX/z2pND4vA4STNE9LwULQPX2MJFjqUdYG7fBePZnIwIDAQAB")
t 是一个新的 Dn 实例,它可能是一个加密库的实例对象。
使用 t.setPublicKey 设置 RSA 公钥,这个公钥用于加密敏感信息。
加密方法 encrypt
encrypt 方法负责对输入数据进行加密:
encrypt: function(e, n){ var r = n && n.format || "hex", o = e;
e 是待加密的字符串。
n 是一个包含加密选项的对象,默认格式为 hex。
混合加密
如果指定 isMix 选项,则进行混合加密:
n && n.isMix && (o = function(e, t){ var n = t && t.timestamp || Un(), r = t && t.nonce || Fn(), o = [n, r, e].join("_"); return { timestamp: n, nonce: r, mixedText: o } }(e, n).mixedText);
生成时间戳(Un)和随机数(Fn)。
将时间戳、随机数和待加密字符串拼接在一起。
RSA 加密
var i = t.encrypt(o), a = e, s = !0;
使用 t.encrypt 方法对字符串进行 RSA 加密。
如果加密成功,i 将是加密后的字符串。
格式转换,根据选项转换加密后的字符串格式:
return i && (a = function(e, t){ switch(t){ case "base64": return e; case "hex": return function(e){ var t, n = "", r = 0, o = 0; for(t = 0; t < e.length && "=" != e.charAt(t); ++t){ var i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(e.charAt(t)); i < 0 ||(0 == r ?(n += jn(i >> 2), o = 3 & i, r = 1) : 1 == r ?(n += jn(o << 2 | i >> 4), o = 15 & i, r = 2) : 2 == r ?(n += jn(o), n += jn(i >> 2), o = 3 & i, r = 3) : (n += jn(o << 2 | i >> 4), n += jn(15 & i), r = 0)) } return 1 == r && (n += jn(o << 2)), n }(e); default: return t } }(i, r), s = !1), { encryptText: a, ignoreEncrypt: s }
详细总结
对象初始化与公钥设置:
Zn 对象初始化时,通过 t.setPublicKey 设置了 RSA 公钥,用于后续的加密操作。
加密方法 encrypt:
接受两个参数:待加密字符串 e 和加密选项 n。
默认格式为 hex,但支持 base64 格式。
支持混合加密(将时间戳和随机数与原始字符串拼接后再加密)。