ejforum的登录密码md5加密验证是什么加密的

1008人阅读
c#/csharp(3)
& & & & 为了避免用户密码使用明文传输,在传输前需要进行加密处理,服务端接收之后再进行解密,这样从一定程度上保护了密码安全。
& & & & 基本过程如下:
& & & & 显然,采用非对称加密更合适,这里我们使用RSA加密算法。
& & & & 需要三方面的东东。
& & & & 第一样,服务器端RSA加解密工具类及KEY定义。
& & & & 第二样,Web端RSA加密工具类,支持根据公钥加密。
& & & & 第三样,用户登录时的处理脚本。
& & & & 赋代码是直接的
& & & &【第一样】
namespace Tool.Security
/// &summary&
/// 对公钥的提供和对解密的支持
/// &/summary&
static class RSAHelper
private static string ByteToHex(byte[] byteArray)
string outString = &&;
foreach (Byte b in byteArray)
outString += b.ToString(&X2&);
return outS
private static byte[] HexToByte(string hexString)
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i & returnBytes.L i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnB
private static RSACryptoServiceProvider GetRSA()
CspParameters _cpsParameter = new CspParameters();
_cpsParameter.Flags = CspProviderFlags.UseMachineKeyS
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024, _cpsParameter);
var keyString = @&&RSAKeyValue&&Modulus&ucNbt0w1Epc/Cs7sgUIvz5GH/s6qe5REAQUrAwo3yFZ/ZElY11urTAQ/CctHppJ8dCplxM5yjHUG+XGlYM700IIYPQaylUKNIRUzdP/Ov3wMfakfHFeItwmNhbVDjicfMPlrnQtwv4hlxMMIfDAKD7TbuwzNyLrmACKGfnXclOM=&/Modulus&&Exponent&AQAB&/Exponent&&P&+hh9uGmx99hDlYMm9X6s4oxWomKFgIFDWw1gTigL1A21yEF0t0lyd1ehIUvJMg9H1UxOQnLMIXViMjrRajXT8w==&/P&&Q&viYPHwxXIUCvzq/SU6CcOnizyXpOR+yL6GrYrbxFCVxvlCdI59P9yXeObVWEbLhp4N+tpMNW4nnLtTgU/WunUQ==&/Q&&DP&LXYQPFpyMFROjLoHde6t7IyIHwJ7tA1LOhznWa2r4MMRPTKwzbR7KzhxoMTO8NuYOiyhuTB27MoSrIDGmmDogw==&/DP&&DQ&HGVcnrteC6Y4Wvpgw4JZslWyK6VrKUyG/DdwkklqWeKG+y3+sjgzTzHegC9kLkQ/84gTy2YshHfB1xc/8zRvcQ==&/DQ&&InverseQ&s4UFcRxlke8UZC5wMpaPgBGUR4DjauLdLtPZV/KFaFjquwAS/Mf1Oguz66afLG6AFUsmevuITyT7/Dq9DnurPg==&/InverseQ&&D&s4EtAm34pxNSDv6vmaQ8kSZ/NOG96hb2s8mrq49XIhc7mMwrtkdVuuorhCpT/Yl2C8bgepJILKP1blu8RFUYSS7SVab/qi1wn6p33hRFb2waxef/QiBPDoLiGDbU6mNsOGGr4fxKcMSrpVhzEJO7fxrZ9yq7ZJ3t2m7N21R9FaE=&/D&&/RSAKeyValue&&;
rsa.FromXmlString(keyString);
public static Publickey GetPublickey()
Publickey publickey = new Publickey();
RSACryptoServiceProvider rsa = GetRSA();
RSAParameters rp = rsa.ExportParameters(false);
publickey.Exponent = ByteToHex(rp.Exponent);
publickey.Modulus = ByteToHex(rp.Modulus);
public static string Decrypt(string s)
RSACryptoServiceProvider rsa = GetRSA();
return Encoding.Default.GetString(rsa.Decrypt(HexToByte(s), false));
class RSAKey
public string XmlString { }
class Publickey
public string Modulus { }
public string Exponent { }
& & & &【第二样】
var canary = 0
var j_lm = ((canary & 0xffffff) == 0xefcafe);
function BigInteger(a, b, c) {
if (a != null)
if (&number& == typeof a) this.fromNumber(a, b, c);
else if (b == null && &string& != typeof a) this.fromString(a, 256);
else this.fromString(a, b);
function nbi() { return new BigInteger(null); }
function am1(i, x, w, j, c, n) {
while (--n &= 0) {
var v = x * this[i++] + w[j] +
c = Math.floor(v / 0x4000000);
w[j++] = v & 0x3
function am2(i, x, w, j, c, n) {
var xl = x & 0x7fff, xh = x && 15;
while (--n &= 0) {
var l = this[i] & 0x7
var h = this[i++] && 15;
var m = xh * l + h *
l = xl * l + ((m & 0x7fff) && 15) + w[j] + (c & 0x3fffffff);
c = (l &&& 30) + (m &&& 15) + xh * h + (c &&& 30);
w[j++] = l & 0x3
function am3(i, x, w, j, c, n) {
var xl = x & 0x3fff, xh = x && 14;
while (--n &= 0) {
var l = this[i] & 0x3
var h = this[i++] && 14;
var m = xh * l + h *
l = xl * l + ((m & 0x3fff) && 14) + w[j] +
c = (l && 28) + (m && 14) + xh *
w[j++] = l & 0
if (j_lm && (navigator.appName == &Microsoft Internet Explorer&)) {
BigInteger.prototype.am = am2;
dbits = 30;
else if (j_lm && (navigator.appName != &Netscape&)) {
BigInteger.prototype.am = am1;
dbits = 26;
BigInteger.prototype.am = am3;
dbits = 28;
BigInteger.prototype.DB =
BigInteger.prototype.DM = ((1 && dbits) - 1);
BigInteger.prototype.DV = (1 && dbits);
var BI_FP = 52;
BigInteger.prototype.FV = Math.pow(2, BI_FP);
BigInteger.prototype.F1 = BI_FP -
BigInteger.prototype.F2 = 2 * dbits - BI_FP;
var BI_RM = &abcdefghijklmnopqrstuvwxyz&;
var BI_RC = new Array();
rr = &0&.charCodeAt(0);
for (vv = 0; vv &= 9; ++vv) BI_RC[rr++] =
rr = &a&.charCodeAt(0);
for (vv = 10; vv & 36; ++vv) BI_RC[rr++] =
rr = &A&.charCodeAt(0);
for (vv = 10; vv & 36; ++vv) BI_RC[rr++] =
function int2char(n) { return BI_RM.charAt(n); }
function intAt(s, i) {
var c = BI_RC[s.charCodeAt(i)];
return (c == null) ? -1 :
function bnpCopyTo(r) {
for (var i = this.t - 1; i &= 0; --i) r[i] = this[i];
r.t = this.t;
r.s = this.s;
function bnpFromInt(x) {
this.t = 1;
this.s = (x & 0) ? -1 : 0;
if (x & 0) this[0] =
else if (x & -1) this[0] = x + DV;
else this.t = 0;
function nbv(i) { var r = nbi(); r.fromInt(i); }
function bnpFromString(s, b) {
if (b == 16) k = 4;
else if (b == 8) k = 3;
else if (b == 256) k = 8;
else if (b == 2) k = 1;
else if (b == 32) k = 5;
else if (b == 4) k = 2;
else { this.fromRadix(s, b); }
this.t = 0;
this.s = 0;
var i = s.length, mi = false, sh = 0;
while (--i &= 0) {
var x = (k == 8) ? s[i] & 0xff : intAt(s, i);
if (x & 0) {
if (s.charAt(i) == &-&) mi =
if (sh == 0)
this[this.t++] =
else if (sh + k & this.DB) {
this[this.t - 1] |= (x & ((1 && (this.DB - sh)) - 1)) &&
this[this.t++] = (x && (this.DB - sh));
this[this.t - 1] |= x &&
if (sh &= this.DB) sh -= this.DB;
if (k == 8 && (s[0] & 0x80) != 0) {
this.s = -1;
if (sh & 0) this[this.t - 1] |= ((1 && (this.DB - sh)) - 1) &&
this.clamp();
if (mi) BigInteger.ZERO.subTo(this, this);
function bnpClamp() {
var c = this.s & this.DM;
while (this.t & 0 && this[this.t - 1] == c) --this.t;
function bnToString(b) {
if (this.s & 0) return &-& + this.negate().toString(b);
if (b == 16) k = 4;
else if (b == 8) k = 3;
else if (b == 2) k = 1;
else if (b == 32) k = 5;
else if (b == 4) k = 2;
else return this.toRadix(b);
var km = (1 && k) - 1, d, m = false, r = &&, i = this.t;
var p = this.DB - (i * this.DB) %
if (i-- & 0) {
if (p & this.DB && (d = this[i] && p) & 0) { m = r = int2char(d); }
while (i &= 0) {
if (p & k) {
d = (this[i] & ((1 && p) - 1)) && (k - p);
d |= this[--i] && (p += this.DB - k);
d = (this[i] && (p -= k)) &
if (p &= 0) { p += this.DB; --i; }
if (d & 0) m =
if (m) r += int2char(d);
return m ? r : &0&;
function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this, r); }
function bnAbs() { return (this.s & 0) ? this.negate() : }
function bnCompareTo(a) {
var r = this.s - a.s;
if (r != 0)
var i = this.t;
r = i - a.t;
if (r != 0)
while (--i &= 0) if ((r = this[i] - a[i]) != 0)
function nbits(x) {
var r = 1,
if ((t = x &&& 16) != 0) { x = r += 16; }
if ((t = x && 8) != 0) { x = r += 8; }
if ((t = x && 4) != 0) { x = r += 4; }
if ((t = x && 2) != 0) { x = r += 2; }
if ((t = x && 1) != 0) { x = r += 1; }
function bnBitLength() {
if (this.t &= 0) return 0;
return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));
function bnpDLShiftTo(n, r) {
for (i = this.t - 1; i &= 0; --i) r[i + n] = this[i];
for (i = n - 1; i &= 0; --i) r[i] = 0;
r.t = this.t +
r.s = this.s;
function bnpDRShiftTo(n, r) {
for (var i = i & this.t; ++i) r[i - n] = this[i];
r.t = Math.max(this.t - n, 0);
r.s = this.s;
function bnpLShiftTo(n, r) {
var bs = n % this.DB;
var cbs = this.DB -
var bm = (1 && cbs) - 1;
var ds = Math.floor(n / this.DB), c = (this.s && bs) & this.DM,
for (i = this.t - 1; i &= 0; --i) {
r[i + ds + 1] = (this[i] && cbs) |
c = (this[i] & bm) &&
for (i = ds - 1; i &= 0; --i) r[i] = 0;
r.t = this.t + ds + 1;
r.s = this.s;
r.clamp();
function bnpRShiftTo(n, r) {
r.s = this.s;
var ds = Math.floor(n / this.DB);
if (ds &= this.t) { r.t = 0; }
var bs = n % this.DB;
var cbs = this.DB -
var bm = (1 && bs) - 1;
r[0] = this[ds] &&
for (var i = ds + 1; i & this.t; ++i) {
r[i - ds - 1] |= (this[i] & bm) &&
r[i - ds] = this[i] &&
if (bs & 0) r[this.t - ds - 1] |= (this.s & bm) &&
r.t = this.t -
r.clamp();
function bnpSubTo(a, r) {
var i = 0, c = 0, m = Math.min(a.t, this.t);
while (i & m) {
c += this[i] - a[i];
r[i++] = c & this.DM;
c &&= this.DB;
if (a.t & this.t) {
while (i & this.t) {
c += this[i];
r[i++] = c & this.DM;
c &&= this.DB;
c += this.s;
c += this.s;
while (i & a.t) {
c -= a[i];
r[i++] = c & this.DM;
c &&= this.DB;
r.s = (c & 0) ? -1 : 0;
if (c & -1) r[i++] = this.DV +
else if (c & 0) r[i++] =
r.clamp();
function bnpMultiplyTo(a, r) {
var x = this.abs(), y = a.abs();
var i = x.t;
r.t = i + y.t;
while (--i &= 0) r[i] = 0;
for (i = 0; i & y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);
r.clamp();
if (this.s != a.s) BigInteger.ZERO.subTo(r, r);
function bnpSquareTo(r) {
var x = this.abs();
var i = r.t = 2 * x.t;
while (--i &= 0) r[i] = 0;
for (i = 0; i & x.t - 1; ++i) {
var c = x.am(i, x[i], r, 2 * i, 0, 1);
if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) &= x.DV) {
r[i + x.t] -= x.DV;
r[i + x.t + 1] = 1;
if (r.t & 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);
r.clamp();
function bnpDivRemTo(m, q, r) {
var pm = m.abs();
if (pm.t &= 0)
var pt = this.abs();
if (pt.t & pm.t) {
if (q != null) q.fromInt(0);
if (r != null) this.copyTo(r);
if (r == null) r = nbi();
var y = nbi(), ts = this.s, ms = m.s;
var nsh = this.DB - nbits(pm[pm.t - 1]);
if (nsh & 0) { pm.lShiftTo(nsh, y); pt.lShiftTo(nsh, r); }
else { pm.copyTo(y); pt.copyTo(r); }
var ys = y.t;
var y0 = y[ys - 1];
if (y0 == 0)
var yt = y0 * (1 && this.F1) + ((ys & 1) ? y[ys - 2] && this.F2 : 0);
var d1 = this.FV / yt, d2 = (1 && this.F1) / yt, e = 1 && this.F2;
var i = r.t, j = i - ys, t = (q == null) ? nbi() :
y.dlShiftTo(j, t);
if (r.compareTo(t) &= 0) {
r[r.t++] = 1;
r.subTo(t, r);
BigInteger.ONE.dlShiftTo(ys, t);
t.subTo(y, y);
while (y.t & ys) y[y.t++] = 0;
while (--j &= 0) {
var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);
if ((r[i] += y.am(0, qd, r, j, 0, ys)) & qd) {
y.dlShiftTo(j, t);
r.subTo(t, r);
while (r[i] & --qd) r.subTo(t, r);
if (q != null) {
r.drShiftTo(ys, q);
if (ts != ms) BigInteger.ZERO.subTo(q, q);
r.clamp();
if (nsh & 0) r.rShiftTo(nsh, r);
if (ts & 0) BigInteger.ZERO.subTo(r, r);
function bnMod(a) {
var r = nbi();
this.abs().divRemTo(a, null, r);
if (this.s & 0 && r.compareTo(BigInteger.ZERO) & 0) a.subTo(r, r);
function Classic(m) { this.m = }
function cConvert(x) {
if (x.s & 0 || x.compareTo(this.m) &= 0) return x.mod(this.m);
function cRevert(x) { }
function cReduce(x) { x.divRemTo(this.m, null, x); }
function cMulTo(x, y, r) { x.multiplyTo(y, r); this.reduce(r); }
function cSqrTo(x, r) { x.squareTo(r); this.reduce(r); }
Classic.prototype.convert = cC
Classic.prototype.revert = cR
Classic.prototype.reduce = cR
Classic.prototype.mulTo = cMulTo;
Classic.prototype.sqrTo = cSqrTo;
function bnpInvDigit() {
if (this.t & 1) return 0;
var x = this[0];
if ((x & 1) == 0) return 0;
var y = x & 3;
y = (y * (2 - (x & 0xf) * y)) & 0
y = (y * (2 - (x & 0xff) * y)) & 0
y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0
y = (y * (2 - x * y % this.DV)) % this.DV;
return (y & 0) ? this.DV - y : -y;
function Montgomery(m) {
this.mp = m.invDigit();
this.mpl = this.mp & 0x7
this.mph = this.mp && 15;
this.um = (1 && (m.DB - 15)) - 1;
this.mt2 = 2 * m.t;
function montConvert(x) {
var r = nbi();
x.abs().dlShiftTo(this.m.t, r);
r.divRemTo(this.m, null, r);
if (x.s & 0 && r.compareTo(BigInteger.ZERO) & 0) this.m.subTo(r, r);
function montRevert(x) {
var r = nbi();
x.copyTo(r);
this.reduce(r);
function montReduce(x) {
while (x.t &= this.mt2)
x[x.t++] = 0;
for (var i = 0; i & this.m.t; ++i) {
var j = x[i] & 0x7
var u0 = (j * this.mpl + (((j * this.mph + (x[i] && 15) * this.mpl) & this.um) && 15)) & x.DM;
j = i + this.m.t;
x[j] += this.m.am(0, u0, x, i, 0, this.m.t);
while (x[j] &= x.DV) { x[j] -= x.DV; x[++j]++; }
x.clamp();
x.drShiftTo(this.m.t, x);
if (x.compareTo(this.m) &= 0) x.subTo(this.m, x);
function montSqrTo(x, r) { x.squareTo(r); this.reduce(r); }
function montMulTo(x, y, r) { x.multiplyTo(y, r); this.reduce(r); }
Montgomery.prototype.convert = montC
Montgomery.prototype.revert = montR
Montgomery.prototype.reduce = montR
Montgomery.prototype.mulTo = montMulTo;
Montgomery.prototype.sqrTo = montSqrTo;
function bnpIsEven() { return ((this.t & 0) ? (this[0] & 1) : this.s) == 0; }
function bnpExp(e, z) {
if (e & 0xffffffff || e & 1) return BigInteger.ONE;
var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e) - 1;
g.copyTo(r);
while (--i &= 0) {
z.sqrTo(r, r2);
if ((e & (1 && i)) & 0) z.mulTo(r2, g, r);
else { var t = r = r2; r2 = }
return z.revert(r);
function bnModPowInt(e, m) {
if (e & 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
return this.exp(e, z);
BigInteger.prototype.copyTo = bnpCopyTo;
BigInteger.prototype.fromInt = bnpFromI
BigInteger.prototype.fromString = bnpFromS
BigInteger.prototype.clamp = bnpC
BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
BigInteger.prototype.drShiftTo = bnpDRShiftTo;
BigInteger.prototype.lShiftTo = bnpLShiftTo;
BigInteger.prototype.rShiftTo = bnpRShiftTo;
BigInteger.prototype.subTo = bnpSubTo;
BigInteger.prototype.multiplyTo = bnpMultiplyTo;
BigInteger.prototype.squareTo = bnpSquareTo;
BigInteger.prototype.divRemTo = bnpDivRemTo;
BigInteger.prototype.invDigit = bnpInvD
BigInteger.prototype.isEven = bnpIsE
BigInteger.prototype.exp = bnpE
BigInteger.prototype.toString = bnToS
BigInteger.prototype.negate = bnN
BigInteger.prototype.abs = bnA
pareTo = bnCompareTo;
BigInteger.prototype.bitLength = bnBitL
BigInteger.prototype.mod = bnM
BigInteger.prototype.modPowInt = bnModPowI
BigInteger.ZERO = nbv(0);
BigInteger.ONE = nbv(1);
function Arcfour() {
this.i = 0;
this.j = 0;
this.S = new Array();
function ARC4init(key) {
for (i = 0; i & 256; ++i)
this.S[i] =
for (i = 0; i & 256; ++i) {
j = (j + this.S[i] + key[i % key.length]) & 255;
t = this.S[i];
this.S[i] = this.S[j];
this.S[j] =
this.i = 0;
this.j = 0;
function ARC4next() {
this.i = (this.i + 1) & 255;
this.j = (this.j + this.S[this.i]) & 255;
t = this.S[this.i];
this.S[this.i] = this.S[this.j];
this.S[this.j] =
return this.S[(t + this.S[this.i]) & 255];
Arcfour.prototype.init = ARC4
Arcfour.prototype.next = ARC4
function prng_newstate() {
return new Arcfour();
var rng_psize = 256;
function rng_seed_int(x) {
rng_pool[rng_pptr++] ^= x & 255;
rng_pool[rng_pptr++] ^= (x && 8) & 255;
rng_pool[rng_pptr++] ^= (x && 16) & 255;
rng_pool[rng_pptr++] ^= (x && 24) & 255;
if (rng_pptr &= rng_psize) rng_pptr -= rng_
function rng_seed_time() {
rng_seed_int(new Date().getTime());
if (rng_pool == null) {
rng_pool = new Array();
rng_pptr = 0;
if (navigator.appName == &Netscape& && navigator.appVersion & &5& && window.crypto) {
var z = window.crypto.random(32);
for (t = 0; t & z. ++t)
rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;
while (rng_pptr & rng_psize) {
t = Math.floor(65536 * Math.random());
rng_pool[rng_pptr++] = t &&& 8;
rng_pool[rng_pptr++] = t & 255;
rng_pptr = 0;
rng_seed_time();
function rng_get_byte() {
if (rng_state == null) {
rng_seed_time();
rng_state = prng_newstate();
rng_state.init(rng_pool);
for (rng_pptr = 0; rng_pptr & rng_pool. ++rng_pptr)
rng_pool[rng_pptr] = 0;
rng_pptr = 0;
return rng_state.next();
function rng_get_bytes(ba) {
for (i = 0; i & ba. ++i) ba[i] = rng_get_byte();
function SecureRandom() { }
SecureRandom.prototype.nextBytes = rng_get_
function parseBigInt(str, r) {
return new BigInteger(str, r);
function linebrk(s, n) {
var ret = &&;
var i = 0;
while (i + n & s.length) {
ret += s.substring(i, i + n) + &\n&;
return ret + s.substring(i, s.length);
function byte2Hex(b) {
if (b & 0x10)
return &0& + b.toString(16);
return b.toString(16);
function pkcs1pad2(s, n) {
if (n & s.length + 11) {
alert(&Message too long for RSA&);
var ba = new Array();
var i = s.length - 1;
while (i &= 0 && n & 0) ba[--n] = s.charCodeAt(i--);
ba[--n] = 0;
var rng = new SecureRandom();
var x = new Array();
while (n & 2) {
while (x[0] == 0) rng.nextBytes(x);
ba[--n] = x[0];
ba[--n] = 2;
ba[--n] = 0;
return new BigInteger(ba);
function RSAKey() {
this.e = 0;
this.dmp1 =
this.dmq1 =
this.coeff =
function RSASetPublic(N, E) {
if (N != null && E != null && N.length & 0 && E.length & 0) {
this.n = parseBigInt(N, 16);
this.e = parseInt(E, 16);
alert(&Invalid RSA public key&);
function RSADoPublic(x) {
return x.modPowInt(this.e, this.n);
function RSAEncrypt(text) {
var m = pkcs1pad2(text, (this.n.bitLength() + 7) && 3);
if (m == null)
var c = this.doPublic(m);
if (c == null)
var h = c.toString(16);
if ((h.length & 1) == 0) else return &0& +
RSAKey.prototype.doPublic = RSADoP
RSAKey.prototype.setPublic = RSASetP
RSAKey.prototype.encrypt = RSAE
var b64map = &ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/&;
var b64pad = &=&;
function hex2b64(h) {
var ret = &&;
for (i = 0; i + 3 &= h. i += 3) {
c = parseInt(h.substring(i, i + 3), 16);
ret += b64map.charAt(c && 6) + b64map.charAt(c & 63);
if (i + 1 == h.length) {
c = parseInt(h.substring(i, i + 1), 16);
ret += b64map.charAt(c && 2);
else if (i + 2 == h.length) {
c = parseInt(h.substring(i, i + 2), 16);
ret += b64map.charAt(c && 2) + b64map.charAt((c & 3) && 4);
while ((ret.length & 3) & 0) ret += b64
function b64tohex(s) {
var ret = &&
var k = 0;
for (i = 0; i & s. ++i) {
if (s.charAt(i) == b64pad)
v = b64map.indexOf(s.charAt(i));
if (v & 0)
if (k == 0) {
ret += int2char(v && 2);
slop = v & 3;
else if (k == 1) {
ret += int2char((slop && 2) | (v && 4));
slop = v & 0
else if (k == 2) {
ret += int2char(slop);
ret += int2char(v && 2);
slop = v & 3;
ret += int2char((slop && 2) | (v && 4));
ret += int2char(v & 0xf);
if (k == 1)
ret += int2char(slop && 2);
function b64toBA(s) {
var h = b64tohex(s);
var a = new Array();
for (i = 0; 2 * i & h. ++i) {
a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);
& & & & 【第三样】
function OnBeforeLoginClick() {
var pwd = $(&PlainPass&).
var maskValue = &xxxxxxxxxxxxxxxxxxxxx&.substring(0, pwd.length);
$(&PlainPass&).value = maskV
var modulus = '公钥modulus';
var exponent = '公钥exponent';
var rsa = new RSAKey();
rsa.setPublic(modulus, exponent);
var res = rsa.encrypt(pwd);
if (res) {
$(&hfPassword&).value =
& & & & 当然,如果我们在密码后带上日期,用于验证加密有效时长,则安全性更高,因为这意味着,同一个密码加密串却是有生存周期的,而不是密码不变,密文始终不变。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3880次
排名:千里之外
(1)(2)(1)(3)中级会员, 积分 259, 距离下一级还需 541 积分
主题帖子社区积分
机&&&&&&&型:魅蓝 note3版&&&&&&&本:6.0.1.1A总签到数:111
轻松注册,让你轻松玩转Flyme社区
才可以下载或查看,没有帐号?
不知道怎么给微信加了密,进去之前都得指纹才行,可是我不记得直接输入密码进去是什么密码了,没印象设置过啊?
2015纪念勋章2015年度评选纪念
2016纪念勋章2016年度评选纪念
MX2拥有MX2
MX3拥有MX3
MX4拥有MX4
MX4 Pro拥有MX4 Pro
魅蓝note拥有魅蓝note
魅蓝note 2拥有魅蓝note 2
MX5拥有MX5
PRO 5拥有PRO 5
关注新浪微博已关注官方新浪微博
关注微信已关注官方微信
荣誉熊猫骑士荣誉熊猫骑士查看: 1730|回复: 8
一个app 的 登录 密码加密
求 大神 帮忙
阅读权限70
在线时间 小时
签到天数:8 天结帖率: (10/19)
附上 下载地址:/down/kingokebiao.apk
本人 能力 有限,希望 有技术 想研究的 人 帮下忙
这是 我抓到的 登录 :
http://jwgl.:8003/jwweb//wap/loginverify_NODES.aspx?param=2riwou2ppqza1tjz6i1nlj9u1r61ti1o6xch1ghn4b2pqs151ywypm1qkm7v1pz6m2&param2=019dec738992bfd0636e2c
http://jwgl.:8003/jwweb//wap/loginverify_NODES.aspx?param=2sptg02qwnqg1uqvxo1osg101scyko1pdu3n1hojvh2qxosb203vgs1tjz6n1nlnwt1sd1nq00002w&param2=ac4c505c4ba97d0eae07b6defed43d91
就是 这些 参数 加密 的我搞不懂 怎么处理了。&&param 和 param2 两个参数。
不知道怎么 处理
您可以选择打赏方式支持楼主
阅读权限70
在线时间 小时
签到天数: 8 天结帖率: (10/19)
好难的说啊
不是吧。。。。比 QQ 登录还 难?
阅读权限50
在线时间 小时
结帖率: (3/3)
好难的说啊
阅读权限130
在线时间 小时
签到天数: 5 天结帖率: (262/263)
我还没有研究明白,有搞好的吗?
阅读权限130
在线时间 小时
签到天数: 5 天结帖率: (262/263)
定制区欢迎你
阅读权限90
在线时间 小时
结帖率: (3/11)
应该不止一条数据的&&好几条数据的组合& & 定制区欢迎你
阅读权限70
在线时间 小时
签到天数: 8 天结帖率: (10/19)
一个DES&&一个MD5& & 猜测
后面 那个 知道是 MD5&&找了 半天 不知道是什么 数据加密的 MD5&&,des 不知道。。。。
阅读权限70
在线时间 小时
签到天数: 8 天结帖率: (10/19)
一个DES&&一个MD5& & 猜测
后面 那个 知道是 MD5&&找了 半天 不知道是什么 数据加密的 MD5&&,des buzhidao
阅读权限90
在线时间 小时
结帖率: (3/11)
一个DES&&一个MD5& & 猜测
精易论坛 - 有你更精彩 /2
【8周年活动】活动完美收官
若快,云速,滴滴。大家快乐兑换呀。
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来为中小企业编写过许许多多各式软件,并把多年积累的开发经验逐步录制成视频课程供学员学习,让学员全面系统化学习易语言编程,少走弯路,减少对相关技术的研究与摸索时间,从而加快了学习进度!
防范网络诈骗,远离网络犯罪
违法和不良信息举报电话,企业QQ: ,邮箱:@
Powered by
粤公网安备 25

我要回帖

更多关于 web登录密码加密传输 的文章

 

随机推荐