python rsa加密之后byte类型存储到数据库中_python3 rsa加密

2023-11-19

遇到了跟你一样的问题。 此js封装的源码 如下。希望看到的大神解决了的话帮我一下。

/*

RSA, a suite of routines for performing RSA public-key computations in JavaScript.

Copyright 1998-2005 David Shapiro.

Dave Shapiro

dave@ohdave.com

changed by Fuchun, 2010-05-06

fcrpg2005@gmail.com

*/

(function($w) {

if(typeof $w.RSAUtils === 'undefined')

var RSAUtils = $w.RSAUtils = {};

var biRadixBase = 2;

var biRadixBits = 16;

var bitsPerDigit = biRadixBits;

var biRadix = 1 << 16; // = 2^16 = 65536

var biHalfRadix = biRadix >>> 1;

var biRadixSquared = biRadix * biRadix;

var maxDigitVal = biRadix - 1;

var maxInteger = 9999999999999998;

//maxDigits:

//Change this to accommodate your largest number size. Use setMaxDigits()

//to change it!

//

//In general, if you're working with numbers of size N bits, you'll need 2*N

//bits of storage. Each digit holds 16 bits. So, a 1024-bit key will need

//

//1024 * 2 / 16 = 128 digits of storage.

//

var maxDigits;

var ZERO_ARRAY;

var bigZero, bigOne;

var BigInt = $w.BigInt = function(flag) {

if (typeof flag == "boolean" && flag == true) {

this.digits = null;

} else {

this.digits = ZERO_ARRAY.slice(0);

}

this.isNeg = false;

};

RSAUtils.setMaxDigits = function(value) {

maxDigits = value;

ZERO_ARRAY = new Array(maxDigits);

for (var iza = 0; iza < ZERO_ARRAY.length; iza++) ZERO_ARRAY[iza] = 0;

bigZero = new BigInt();

bigOne = new BigInt();

bigOne.digits[0] = 1;

};

RSAUtils.setMaxDigits(20);

//The maximum number of digits in base 10 you can convert to an

//integer without JavaScript throwing up on you.

var dpl10 = 15;

RSAUtils.biFromNumber = function(i) {

var result = new BigInt();

result.isNeg = i < 0;

i = Math.abs(i);

var j = 0;

while (i > 0) {

result.digits[j++] = i & maxDigitVal;

i = Math.floor(i / biRadix);

}

return result;

};

//lr10 = 10 ^ dpl10

var lr10 = RSAUtils.biFromNumber(1000000000000000);

RSAUtils.biFromDecimal = function(s) {

var isNeg = s.charAt(0) == '-';

var i = isNeg ? 1 : 0;

var result;

// Skip leading zeros.

while (i < s.length && s.charAt(i) == '0') ++i;

if (i == s.length) {

result = new BigInt();

}

else {

var digitCount = s.length - i;

var fgl = digitCount % dpl10;

if (fgl == 0) fgl = dpl10;

result = RSAUtils.biFromNumber(Number(s.substr(i, fgl)));

i += fgl;

while (i < s.length) {

result = RSAUtils.biAdd(RSAUtils.biMultiply(result, lr10),

RSAUtils.biFromNumber(Number(s.substr(i, dpl10))));

i += dpl10;

}

result.isNeg = isNeg;

}

return result;

};

RSAUtils.biCopy = function(bi) {

var result = new BigInt(true);

result.digits = bi.digits.slice(0);

result.isNeg = bi.isNeg;

return result;

};

RSAUtils.reverseStr = function(s) {

var result = "";

for (var i = s.length - 1; i > -1; --i) {

result += s.charAt(i);

}

return result;

};

var hexatrigesimalToChar = [

'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',

'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',

'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',

'u', 'v', 'w', 'x', 'y', 'z'

];

RSAUtils.biToString = function(x, radix) { // 2 <= radix <= 36

var b = new BigInt();

b.digits[0] = radix;

var qr = RSAUtils.biDivideModulo(x, b);

var result = hexatrigesimalToChar[qr[1].digits[0]];

while (RSAUtils.biCompare(qr[0], bigZero) == 1) {

qr = RSAUtils.biDivideModulo(qr[0], b);

digit = qr[1].digits[0];

result += hexatrigesimalToChar[qr[1].digits[0]];

}

return (x.isNeg ? "-" : "") + RSAUtils.reverseStr(result);

};

RSAUtils.biToDecimal = function(x) {

var b = new BigInt();

b.digits[0] = 10;

var qr = RSAUtils.biDivideModulo(x, b);

var result = String(qr[1].digits[0]);

while (RSAUtils.biCompare(qr[0], bigZero) == 1) {

qr = RSAUtils.biDivideModulo(qr[0], b);

result += String(qr[1].digits[0]);

}

return (x.isNeg ? "-" : "") + RSAUtils.reverseStr(result);

};

var hexToChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',

'a', 'b', 'c', 'd', 'e', 'f'];

RSAUtils.digitToHex = function(n) {

var mask = 0xf;

var result = "";

for (i = 0; i < 4; ++i) {

result += hexToChar[n & mask];

n >>>= 4;

}

return RSAUtils.reverseStr(result);

};

RSAUtils.biToHex = function(x) {

var result = "";

var n = RSAUtils.biHighIndex(x);

for (var i = RSAUtils.biHighIndex(x); i > -1; --i) {

result += RSAUtils.digitToHex(x.digits[i]);

}

return result;

};

RSAUtils.charToHex = function(c) {

var ZERO = 48;

var NINE = ZERO + 9;

var littleA = 97;

var littleZ = littleA + 25;

var bigA = 65;

var bigZ = 65 + 25;

var result;

if (c >= ZERO && c <= NINE) {

result = c - ZERO;

} else if (c >= bigA && c <= bigZ) {

result = 10 + c - bigA;

} else if (c >= littleA && c <= littleZ) {

result = 10 + c - littleA;

} else {

result = 0;

}

return result;

};

RSAUtils.hexToDigit = function(s) {

var result = 0;

var sl = Math.min(s.length, 4);

for (var i = 0; i < sl; ++i) {

result <<= 4;

result |= RSAUtils.charToHex(s.charCodeAt(i));

}

return result;

};

RSAUtils.biFromHex = function(s) {

var result = new BigInt();

var sl = s.length;

for (var i = sl, j = 0; i > 0; i -= 4, ++j) {

result.digits[j] = RSAUtils.hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4)));

}

return result;

};

RSAUtils.biFromString = function(s, radix) {

var isNeg = s.charAt(0) == '-';

var istop = isNeg ? 1 : 0;

var result = new BigInt();

var place = new BigInt();

place.digits[0] = 1; // radix^0

for (var i = s.length - 1; i >= istop; i--) {

var c = s.charCodeAt(i);

var digit = RSAUtils.charToHex(c);

var biDigit = RSAUtils.biMultiplyDigit(place, digit);

result = RSAUtils.biAdd(result, biDigit);

place = RSAUtils.biMultiplyDigit(place, radix);

}

result.isNeg = isNeg;

return result;

};

RSAUtils.biDump = function(b) {

return (b.isNeg ? "-" : "") + b.digits.join(" ");

};

RSAUtils.biAdd = function(x, y) {

var result;

if (x.isNeg != y.isNeg) {

y.isNeg = !y.isNeg;

result = RSAUtils.biSubtract(x, y);

y.isNeg = !y.isNeg;

}

else {

result = new BigInt();

var c = 0;

var n;

for (var i = 0; i < x.digits.length; ++i) {

n = x.digits[i] + y.digits[i] + c;

result.digits[i] = n % biRadix;

c = Number(n >= biRadix);

}

result.isNeg = x.isNeg;

}

return result;

};

RSAUtils.biSubtract = function(x, y) {

var result;

if (x.isNeg != y.isNeg) {

y.isNeg = !y.isNeg;

result = RSAUtils.biAdd(x, y);

y.isNeg = !y.isNeg;

} else {

result = new BigInt();

var n, c;

c = 0;

for (var i = 0; i < x.digits.length; ++i) {

n = x.digits[i] - y.digits[i] + c;

result.digits[i] = n % biRadix;

// Stupid non-conforming modulus operation.

if (result.digits[i] < 0) result.digits[i] += biRadix;

c = 0 - Number(n < 0);

}

// Fix up the negative sign, if any.

if (c == -1) {

c = 0;

for (var i = 0; i < x.digits.length; ++i) {

n = 0 - result.digits[i] + c;

result.digits[i] = n % biRadix;

// Stupid non-conforming modulus operation.

if (result.digits[i] < 0) result.digits[i] += biRadix;

c = 0 - Number(n < 0);

}

// Result is opposite sign of arguments.

result.isNeg = !x.isNeg;

} else {

// Result is same sign.

result.isNeg = x.isNeg;

}

}

return result;

};

RSAUtils.biHighIndex = function(x) {

var result = x.digits.length - 1;

while (result > 0 && x.digits[result] == 0) --result;

return result;

};

RSAUtils.biNumBits = function(x) {

var n = RSAUtils.biHighIndex(x);

var d = x.digits[n];

var m = (n + 1) * bitsPerDigit;

var result;

for (result = m; result > m - bitsPerDigit; --result) {

if ((d & 0x8000) != 0) break;

d <<= 1;

}

return result;

};

RSAUtils.biMultiply = function(x, y) {

var result = new BigInt();

var c;

var n = RSAUtils.biHighIndex(x);

var t = RSAUtils.biHighIndex(y);

var u, uv, k;

for (var i = 0; i <= t; ++i) {

c = 0;

k = i;

for (j = 0; j <= n; ++j, ++k) {

uv = result.digits[k] + x.digits[j] * y.digits[i] + c;

result.digits[k] = uv & maxDigitVal;

c = uv >>> biRadixBits;

//c = Math.floor(uv / biRadix);

}

result.digits[i + n + 1] = c;

}

// Someone give me a logical xor, please.

result.isNeg = x.isNeg != y.isNeg;

return result;

};

RSAUtils.biMultiplyDigit = function(x, y) {

var n, c, uv;

result = new BigInt();

n = RSAUtils.biHighIndex(x);

c = 0;

for (var j = 0; j <= n; ++j) {

uv = result.digits[j] + x.digits[j] * y + c;

result.digits[j] = uv & maxDigitVal;

c = uv >>> biRadixBits;

//c = Math.floor(uv / biRadix);

}

result.digits[1 + n] = c;

return result;

};

RSAUtils.arrayCopy = function(src, srcStart, dest, destStart, n) {

var m = Math.min(srcStart + n, src.length);

for (var i = srcStart, j = destStart; i < m; ++i, ++j) {

dest[j] = src[i];

}

};

var highBitMasks = [0x0000, 0x8000, 0xC000, 0xE000, 0xF000, 0xF800,

0xFC00, 0xFE00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0,

0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF];

RSAUtils.biShiftLeft = function(x, n) {

var digitCount = Math.floor(n / bitsPerDigit);

var result = new BigInt();

RSAUtils.arrayCopy(x.digits, 0, result.digits, digitCount,

result.digits.length - digitCount);

var bits = n % bitsPerDigit;

var rightBits = bitsPerDigit - bits;

for (var i = result.digits.length - 1, i1 = i - 1; i > 0; --i, --i1) {

result.digits[i] = ((result.digits[i] << bits) & maxDigitVal) |

((result.digits[i1] & highBitMasks[bits]) >>>

(rightBits));

}

result.digits[0] = ((result.digits[i] << bits) & maxDigitVal);

result.isNeg = x.isNeg;

return result;

};

var lowBitMasks = [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F,

0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF,

0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF];

RSAUtils.biShiftRight = function(x, n) {

var digitCount = Math.floor(n / bitsPerDigit);

var result = new BigInt();

RSAUtils.arrayCopy(x.digits, digitCount, result.digits, 0,

x.digits.length - digitCount);

var bits = n % bitsPerDigit;

var leftBits = bitsPerDigit - bits;

for (var i = 0, i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) {

result.digits[i] = (result.digits[i] >>> bits) |

((result.digits[i1] & lowBitMasks[bits]) << leftBits);

}

result.digits[result.digits.length - 1] >>>= bits;

result.isNeg = x.isNeg;

return result;

};

RSAUtils.biMultiplyByRadixPower = function(x, n) {

var result = new BigInt();

RSAUtils.arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n);

return result;

};

RSAUtils.biDivideByRadixPower = function(x, n) {

var result = new BigInt();

RSAUtils.arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n);

return result;

};

RSAUtils.biModuloByRadixPower = function(x, n) {

var result = new BigInt();

RSAUtils.arrayCopy(x.digits, 0, result.digits, 0, n);

return result;

};

RSAUtils.biCompare = function(x, y) {

if (x.isNeg != y.isNeg) {

return 1 - 2 * Number(x.isNeg);

}

for (var i = x.digits.length - 1; i >= 0; --i) {

if (x.digits[i] != y.digits[i]) {

if (x.isNeg) {

return 1 - 2 * Number(x.digits[i] > y.digits[i]);

} else {

return 1 - 2 * Number(x.digits[i] < y.digits[i]);

}

}

}

return 0;

};

RSAUtils.biDivideModulo = function(x, y) {

var nb = RSAUtils.biNumBits(x);

var tb = RSAUtils.biNumBits(y);

var origYIsNeg = y.isNeg;

var q, r;

if (nb < tb) {

// |x| < |y|

if (x.isNeg) {

q = RSAUtils.biCopy(bigOne);

q.isNeg = !y.isNeg;

x.isNeg = false;

y.isNeg = false;

r = biSubtract(y, x);

// Restore signs, 'cause they're references.

x.isNeg = true;

y.isNeg = origYIsNeg;

} else {

q = new BigInt();

r = RSAUtils.biCopy(x);

}

return [q, r];

}

q = new BigInt();

r = x;

// Normalize Y.

var t = Math.ceil(tb / bitsPerDigit) - 1;

var lambda = 0;

while (y.digits[t] < biHalfRadix) {

y = RSAUtils.biShiftLeft(y, 1);

++lambda;

++tb;

t = Math.ceil(tb / bitsPerDigit) - 1;

}

// Shift r over to keep the quotient constant. We'll shift the

// remainder back at the end.

r = RSAUtils.biShiftLeft(r, lambda);

nb += lambda; // Update the bit count for x.

var n = Math.ceil(nb / bitsPerDigit) - 1;

var b = RSAUtils.biMultiplyByRadixPower(y, n - t);

while (RSAUtils.biCompare(r, b) != -1) {

++q.digits[n - t];

r = RSAUtils.biSubtract(r, b);

}

for (var i = n; i > t; --i) {

var ri = (i >= r.digits.length) ? 0 : r.digits[i];

var ri1 = (i - 1 >= r.digits.length) ? 0 : r.digits[i - 1];

var ri2 = (i - 2 >= r.digits.length) ? 0 : r.digits[i - 2];

var yt = (t >= y.digits.length) ? 0 : y.digits[t];

var yt1 = (t - 1 >= y.digits.length) ? 0 : y.digits[t - 1];

if (ri == yt) {

q.digits[i - t - 1] = maxDigitVal;

} else {

q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt);

}

var c1 = q.digits[i - t - 1] * ((yt * biRadix) + yt1);

var c2 = (ri * biRadixSquared) + ((ri1 * biRadix) + ri2);

while (c1 > c2) {

--q.digits[i - t - 1];

c1 = q.digits[i - t - 1] * ((yt * biRadix) | yt1);

c2 = (ri * biRadix * biRadix) + ((ri1 * biRadix) + ri2);

}

b = RSAUtils.biMultiplyByRadixPower(y, i - t - 1);

r = RSAUtils.biSubtract(r, RSAUtils.biMultiplyDigit(b, q.digits[i - t - 1]));

if (r.isNeg) {

r = RSAUtils.biAdd(r, b);

--q.digits[i - t - 1];

}

}

r = RSAUtils.biShiftRight(r, lambda);

// Fiddle with the signs and stuff to make sure that 0 <= r < y.

q.isNeg = x.isNeg != origYIsNeg;

if (x.isNeg) {

if (origYIsNeg) {

q = RSAUtils.biAdd(q, bigOne);

} else {

q = RSAUtils.biSubtract(q, bigOne);

}

y = RSAUtils.biShiftRight(y, lambda);

r = RSAUtils.biSubtract(y, r);

}

// Check for the unbelievably stupid degenerate case of r == -0.

if (r.digits[0] == 0 && RSAUtils.biHighIndex(r) == 0) r.isNeg = false;

return [q, r];

};

RSAUtils.biDivide = function(x, y) {

return RSAUtils.biDivideModulo(x, y)[0];

};

RSAUtils.biModulo = function(x, y) {

return RSAUtils.biDivideModulo(x, y)[1];

};

RSAUtils.biMultiplyMod = function(x, y, m) {

return RSAUtils.biModulo(RSAUtils.biMultiply(x, y), m);

};

RSAUtils.biPow = function(x, y) {

var result = bigOne;

var a = x;

while (true) {

if ((y & 1) != 0) result = RSAUtils.biMultiply(result, a);

y >>= 1;

if (y == 0) break;

a = RSAUtils.biMultiply(a, a);

}

return result;

};

RSAUtils.biPowMod = function(x, y, m) {

var result = bigOne;

var a = x;

var k = y;

while (true) {

if ((k.digits[0] & 1) != 0) result = RSAUtils.biMultiplyMod(result, a, m);

k = RSAUtils.biShiftRight(k, 1);

if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;

a = RSAUtils.biMultiplyMod(a, a, m);

}

return result;

};

$w.BarrettMu = function(m) {

this.modulus = RSAUtils.biCopy(m);

this.k = RSAUtils.biHighIndex(this.modulus) + 1;

var b2k = new BigInt();

b2k.digits[2 * this.k] = 1; // b2k = b^(2k)

this.mu = RSAUtils.biDivide(b2k, this.modulus);

this.bkplus1 = new BigInt();

this.bkplus1.digits[this.k + 1] = 1; // bkplus1 = b^(k+1)

this.modulo = BarrettMu_modulo;

this.multiplyMod = BarrettMu_multiplyMod;

this.powMod = BarrettMu_powMod;

};

function BarrettMu_modulo(x) {

var $dmath = RSAUtils;

var q1 = $dmath.biDivideByRadixPower(x, this.k - 1);

var q2 = $dmath.biMultiply(q1, this.mu);

var q3 = $dmath.biDivideByRadixPower(q2, this.k + 1);

var r1 = $dmath.biModuloByRadixPower(x, this.k + 1);

var r2term = $dmath.biMultiply(q3, this.modulus);

var r2 = $dmath.biModuloByRadixPower(r2term, this.k + 1);

var r = $dmath.biSubtract(r1, r2);

if (r.isNeg) {

r = $dmath.biAdd(r, this.bkplus1);

}

var rgtem = $dmath.biCompare(r, this.modulus) >= 0;

while (rgtem) {

r = $dmath.biSubtract(r, this.modulus);

rgtem = $dmath.biCompare(r, this.modulus) >= 0;

}

return r;

}

function BarrettMu_multiplyMod(x, y) {

/*

x = this.modulo(x);

y = this.modulo(y);

*/

var xy = RSAUtils.biMultiply(x, y);

return this.modulo(xy);

}

function BarrettMu_powMod(x, y) {

var result = new BigInt();

result.digits[0] = 1;

var a = x;

var k = y;

while (true) {

if ((k.digits[0] & 1) != 0) result = this.multiplyMod(result, a);

k = RSAUtils.biShiftRight(k, 1);

if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;

a = this.multiplyMod(a, a);

}

return result;

}

var RSAKeyPair = function(encryptionExponent, decryptionExponent, modulus) {

var $dmath = RSAUtils;

this.e = $dmath.biFromHex(encryptionExponent);

this.d = $dmath.biFromHex(decryptionExponent);

this.m = $dmath.biFromHex(modulus);

// We can do two bytes per digit, so

// chunkSize = 2 * (number of digits in modulus - 1).

// Since biHighIndex returns the high index, not the number of digits, 1 has

// already been subtracted.

this.chunkSize = 2 * $dmath.biHighIndex(this.m);

this.radix = 16;

this.barrett = new $w.BarrettMu(this.m);

};

RSAUtils.getKeyPair = function(encryptionExponent, decryptionExponent, modulus) {

return new RSAKeyPair(encryptionExponent, decryptionExponent, modulus);

};

if(typeof $w.twoDigit === 'undefined') {

$w.twoDigit = function(n) {

return (n < 10 ? "0" : "") + String(n);

};

}

// Altered by Rob Saunders (rob@robsaunders.net). New routine pads the

// string after it has been converted to an array. This fixes an

// incompatibility with Flash MX's ActionScript.

RSAUtils.encryptedString = function(key, s) {

var a = [];

var sl = s.length;

var i = 0;

while (i < sl) {

a[i] = s.charCodeAt(i);

i++;

}

while (a.length % key.chunkSize != 0) {

a[i++] = 0;

}

var al = a.length;

var result = "";

var j, k, block;

for (i = 0; i < al; i += key.chunkSize) {

block = new BigInt();

j = 0;

for (k = i; k < i + key.chunkSize; ++j) {

block.digits[j] = a[k++];

block.digits[j] += a[k++] << 8;

}

var crypt = key.barrett.powMod(block, key.e);

var text = key.radix == 16 ? RSAUtils.biToHex(crypt) : RSAUtils.biToString(crypt, key.radix);

result += text + " ";

}

return result.substring(0, result.length - 1); // Remove last space.

};

RSAUtils.decryptedString = function(key, s) {

var blocks = s.split(" ");

var result = "";

var i, j, block;

for (i = 0; i < blocks.length; ++i) {

var bi;

if (key.radix == 16) {

bi = RSAUtils.biFromHex(blocks[i]);

}

else {

bi = RSAUtils.biFromString(blocks[i], key.radix);

}

block = key.barrett.powMod(bi, key.d);

for (j = 0; j <= RSAUtils.biHighIndex(block); ++j) {

result += String.fromCharCode(block.digits[j] & 255,

block.digits[j] >> 8);

}

}

// Remove trailing null, if any.

if (result.charCodeAt(result.length - 1) == 0) {

result = result.substring(0, result.length - 1);

}

return result;

};

RSAUtils.setMaxDigits(130);

})(window);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python rsa加密之后byte类型存储到数据库中_python3 rsa加密 的相关文章

  • kodi没有中文设置_kodi播放器设置中文的方法

    KODI播放器是一款强大的多媒体播放器 其能够支持目前几乎所有的主流格式文件的播放 而且除了视频文件外 即使是音乐 图片 电视节目等其他媒体文件也能够正常进行播放 而且能够支持投屏扥更种辅助功能 为用户提供了一套完整的播放方案 因而广受用户
  • zookeeper学习草稿纸

    指令重排序 https baijiahao baidu com s id 1701616903992143186 wfr spider for pc JVM JDK JRE 静态方法为什么不能调用非静态成员 重载和重写的区别 可变参数 基本
  • 高质量、高并发的实时通信架构设计与探索

    中国互联网络信息中心 CNNIC 近日发布的第 47 次 中国互联网络发展状况统计报告 显示 截至 2020 年 12 月 我国网民规模达 9 89 亿 随着社会信息化水平持续提升及电子设备加速普及 手机网民规模持续增长 基本实现对全体网民
  • 关于Semaphore信号量的源码解读

    Semaphore的简单使用 利用Semaphore可以实现对线程数量的控制 比如如下的代码 class SemaphoreTest public static void main String args Semaphore semapho
  • 【RTX 3060Ti 深度学习环境配置图文(安装Anaconda、VScode、CUDA、CUDNN、pytorch)】

    RTX 3060Ti 深度学习环境配置图文 安装Anaconda VScode CUDA CUDNN pytorch 配置 安装驱动 一 安装Anaconda 1 1 Anaconda简介 1 2 下载Anaconda 1 3安装Anaco
  • SpringBoot集成jasypt,加密yml配置文件

    SpringBoot集成jasypt 加密yml配置文件 一 pom配置 二 生成密文代码 三 配置 3 1 yml加密配置 3 2 密文配置 3 3 启动配置 3 4 部署配置 四 遇到的一些坑 最新项目安全检测 发现配置文件中数据库密码
  • Spring学习笔记day01——Spring入门

    Spring学习 Spring介绍 1 1Spring概述 Spring是一个开源框架 Spring是于2003 年兴起的一个轻量级的Java 开发框架 由Rod Johnson 在其著作Expert One On One J2EE Dev
  • 设计模式的 C++ 实现---工厂方法模式(二)

    前文回顾 单例模式 一 单例模式 二 观察者模式 简单工厂模式 工厂方法模式 一 前言 对于工厂方法模式 当增加新产品时 也需要对应增加一个工厂类 可以使用模版进行封装 减少代码工作量 实现举例 产品抽象基类 class Animal pu
  • TypeScript 基本概念

    TypeScript 是什么 目标 能够说出什么是 TypeScript TS 官方文档 TS 中文参考 不再维护 TypeScript 简称 TS 是 JavaScript 的超集 JS 有的 TS 都有 TypeScript Type
  • 分布式锁实现方案2、基于Redis的SET操作实现的分布式锁

    继上一篇文章 分布式锁实现方案1 基于Redis的SETNX操作实现的分布式锁 实现方案之后 redis又提供了更加强大的set方法 可以解决分布式锁实现方案1中提到的缺陷 直接看代码 package com alioo lock impo
  • C++Primer第五版习题答案(二)

    第二章 变量和基本类型 2 8 2 10 2 14 C Primer第五版课后习题答案目录 2 8 include
  • vue3项目实战---知乎日报----首页功能

    目录 网络请求封装 header swiper items新闻列表 home IntersectionObserver API 使用教程 性能优化 网络请求封装 GET传参格式 www baidu com info t 0 age 18 传
  • IntelliJ IDEA中代码被覆盖了怎么恢复

    在你git pull 拉去代码的时候 在IntelliJ IDEA中一不小心将你本地代码给覆盖了 这个时候 你撤回是无效的时候 是不是有点小激动 还有点小慌 辛辛苦苦写的代码没啦 被覆盖了 不要慌 只要用的是IntelliJ IDEA这个工
  • javaの日志级别

    最近几周给项目补日志 头都大了 项目开发接口时一定要同步日志 一定 首先 日志级别从低到高 all
  • 网络安全应急响应操作流程-打好应急响应保卫战

    文章目录 应急响应 应急响应目标 应急响应标准流程 事前 事中 检测 响应 处置 溯源 人的识别 核心注意事项 参考文献 应急响应 应急响应是安全工作的重点和难点 由于响应过程中压力比较大 难免出现手忙脚乱的情况 因此怎样做好应急响应工作是
  • router和route的区别

    简单理解为 route是用来获取路由信息的 router是用来操作路由的 一 router router是VueRouter的实例 通过Vue use VueRouter 和VueRouter构造函数得到一个router的实例对象 这个对象
  • List、Queue

    1 ArrayList 底层是基于动态数组的数据结构 是有存放顺序的 2 LinkedList 底层是基于双链表的数据结构 每一个存储单元 都涉及到其他两个引用 优缺点 在执行get set 时 ArrayList的效率高 LinkedLi
  • Matlab产生离散正弦信号即绘制频谱图

    假设正弦信号频率为f0 40000Hz 采样频率fs 160000Hz 注意 fs必须大于2f0 否则采到的点根本不是正弦 实际上 fs 4f0是比较合适的 Matlab程序如下 function y gensinx f0 fs n N f
  • [YOLO专题-27]:YOLO V5 小目标检测遇到的问题与常见解决办法

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 YOLO专题 27 YOLO V5 小目标检测遇到的问题与常见解决办法 文火冰糖 王文兵 的博客 CSDN博客 目录 第1章 前言 第2章

随机推荐

  • freeswitch二、freeswitch之注册,呼叫接听测试

    在上一篇文章中讲解了freeswitch的安装方法 安装完后测试了和数据库的交互 下面就要测试一下freeswitch的功能了 freeswitch测试 freeswitch的conf目录中有20个默认的sip账号 可以直接做简单的测试 其
  • sys用户下为其他用户的创建私有db link的案例

    文章目录 1 查询job执行情况 2 确认根因 3 重建DB LINK 3 1使用current schema方式 3 2使用procedure方式 4 重新编译失效的对象 并手动执行job 记录一下scheduler job执行失败 而不
  • 类型“ScriptManager”的控件“ScriptManager1”必须放在具有 runat=server 的窗体标记内。...

  • 表单提交Post方法、Get方法背后的秘密

    表单大家都很熟悉 上网的时候经常会遇到表单 表单用来接受用户的输入 并将用户的输入以 name value值对 集合的形式提交到服务器进行处理 那么表单是怎样将数据提交到服务器的 服务器是怎样对表单数据进行处理的 下面我将为大家揭开表单提交
  • 数据中台-让数据用起来-6

    文章目录 第六章 数据开发 数据价值提炼工厂 6 1 数据计算能力的4种类型 6 1 1 批计算 6 1 2 流计算 6 1 3 在线查询 6 1 4 即席分析 6 2 离线开发 1 作业调度 2 基线控制 3 异构存储 4 代码校验 5
  • Tomcat 服务器的使用(IDEA 2021.3)

    目录 1 Tomcat 下载和安装 2 IDEA 创建 JavaWeb 项目 3 IDEA 集成 Tomcat 并发布项目 服务器是计算机的一种 它比普通计算机运行更快 负载更高 价格更贵 服务器在网络中为其它客户机 如PC机 智能设备等
  • 精致的动画特效源代码

    动画特效 css简介 代码部分 纯css3云彩动画效果 css3放大镜动画效果 jQuery游戏图片手风琴收缩切换特效 js百叶窗图片3D旋转切换特效 纯CSS3制作飞舞的火箭动画 简单易用的纯CSS3图片墙效果 一个简单好看的纯CSS3翻
  • 【风格迁移系列三】(Adain)Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization 论文解读

    最近看了这篇论文 Arbitrary Style Transfer in Real time with Adaptive Instance Normalization 由于没有详细的博客参考 还是花了一些时间来阅读论文 于是提出自己对论文的
  • 代码随想录算法训练营第一天

    Leetcode704 二分查找 题目链接 关键词 二分查找 循环不变量 区间 问题思路 二分查找的应用 关键在于循环过程中区间的维护 记住循环不变量原则 在这个问题中循环不变量是区间的定义 注意左闭右开和左开右闭的区别 class Sol
  • Apache POI组件操作Excel

    Apache的POI组件是Java操作Microsoft Office办公套件的强大API 其中对Word Excel和PowperPoint都有支持 当然使用较多的还是Excel 因为Word和PowerPoint用程序动态操作的应用较少
  • proto学习

    介绍 protocol buffers 是一种语言无关 平台无关 可扩展的序列化结构数据的方法 它可用于通信协议 数据存储等 protocol buffers的接口 c java python API doc link https deve
  • 用Python画一个生日蛋糕并写上生日祝福对象及生日祝福语

    用Python画一个生日蛋糕并写上生日祝福对象及生日祝福语 画一个双层蛋糕并点上蜡烛 代码运行时间较长 请静待惊喜出现 代码运行截图 完整程序代码 干货主要有 200 多本 Python 电子书 和经典的书籍 应该有 Python标准库资料
  • 掌握 Ajax,第 7 部分: 在请求和响应中使用 XML

    偶尔使用 Ajax 的开发人员也会注意到 Ajax 中的 x 并意识到它代表 XML XML 是编程中最常用的数据格式之一 对于异步应用程序中的服务器响应能够带来切实的好处 在本文中 您将看到服务器如何在请求响应中发送 XML 现在如果不使
  • Java设计模式:装饰者模式(Decorator Pattern)

    装饰者模式 涉及的重要设计原则 类应该对扩展开放 对修改关闭 装饰者模式定义 装饰者模式动态地将责任附加到对象上 若要扩展功能 装饰者提供了比继承更有弹性的替代方案 UML类图 装饰者模式事例 咖啡店 咖啡种类 1 深焙咖啡 DarkRoa
  • Python中如何使用boolean类型的数据

    在写代码的过程中 遇到了定义boolean类型变量的问题 之前一直试图用java或者c定义布尔变量的方法 一直不奏效 经过一旦学习之后才明白 和java竟然只是大小写的问题 在python中将java中的true携程True 将false携
  • Educational Codeforces Round 149 (Rated for Div. 2)A~D

    Grasshopper on a Line 题意 给出n和k 求从0到n最少走几步 以及步长 要求步长不能整除k 思路 从n往下找到 k不等于0的数 输出该数和n 该数即可 如果n k 0 那就只需要一步 代码 gt File Name a
  • 探索Java8——默认方法

    文章目录 什么是默认方法 不断演进的API 初始版本API 第二版API 概述默认方法 什么是默认方法 在传统的Java程序中 实现接口的方式是通过Implements把接口中的每一个方法提供一个实现 或者从父类继承他的实现 然而 在实际开
  • redis搜索 - KEYS命令

    文章目录 KEYS命令 使用 使用场景 KEYS命令 KEYS命令用于搜索匹配某个模式的所有key 例如常见的keys 命令 会返回所有的键 Time complexity O N 使用 KEYS命令支持以下正则匹配模式 h llo mat
  • [STM32]详解单片机GPIO输入模式配置-上拉下拉与浮空

    前面说到单片机的GPIO主要输出模式主要有推挽模式和开漏模式 除了连接到片内外设的模拟输入模式和复用输入功能以外 这里再说一下通用输入模式配置 STM32单片机的通用输入模式主要有输入浮空 输入上拉与输入下拉 当配置成上拉模式 即GPIO
  • python rsa加密之后byte类型存储到数据库中_python3 rsa加密

    遇到了跟你一样的问题 此js封装的源码 如下 希望看到的大神解决了的话帮我一下 RSA a suite of routines for performing RSA public key computations in JavaScript