爬虫逆向加密技术详解之非对称加密算法:RSA加密解密

一、非对称加密介绍


RSA属于非对称加密算法,不知道什么是非对称加密的小伙伴请看这篇文章:https://blog.csdn.net/thy525/article/details/147821844


二、RSA概念

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出。其核心基于大数分解的数学难题:将两个大素数的乘积分解回原始素数在实际计算中是不可行的。RSA通过公钥与私钥配对实现加密与解密:

  • 公钥:用于加密数据,可公开分发。
  • 私钥:用于解密数据,需严格保密。

三、RSA特点

  1. 非对称性:加密与解密使用不同密钥。
  2. 数学安全性:依赖大数分解难题,破解成本极高。
  3. 速度较慢:相比对称加密(如AES),处理大数据时性能较差,通常用于加密密钥或小数据。
  4. 数字签名支持:可通过私钥签名、公钥验签实现身份验证。

四、密钥参数与格式

RSA密钥在线生成工具http://web.chacuo.net/netrsakeypair

4.1 常用密钥位数

  • 1024位:历史遗留系统可能使用,但已不安全。
  • 2048位:当前主流选择,平衡安全性与性能。
  • 4096位:更高安全性,但性能开销更大。

4.2 密钥格式标准

  • PKCS#1:RSA专用格式,公钥包含模数 n n n 和公钥指数 e e e ,私钥包含 n n n、私钥指数 d d d 及CRT参数( p p p q q q d d d m o d ( p − 1 ) mod (p-1) mod(p1)) 等)。
  • PKCS#8:通用密钥格式,可封装RSA、ECC等算法密钥,结构更灵活。

4.3 密钥输出格式

4.3.1 PEM/Base64编码

使用PEM/Base64编码,以-----BEGIN...-----END...包裹。

  • 公钥示例:

    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzRHRsMzGQCAo67BHRR7k
    rIGN2V4WccqcuKN0PZOSYYfNmJ4sgZgXMVULhYiHA3F6DSalrirJADTydBomAni7
    Ic8G5UlM06BwT22zSmb7WunvA/f+2rXoMw3sTuUcbUybzyODNT9ySOLB/T1nHmwM
    DTAo92p4TuVQp3h4z3QIfKvZrRAJXglURhdsMa+jW7mIES+H6CqouQ7ruEo7GeQ+
    OB53YmZz9uw4BHBDHXJypEbxF0Z8SbpsDUShruwkHJFn0TPIb5yesm28fyYcqMfM
    XrPEsHYn0WVpBtr+hRTYOV+XYiICbA28Edsg/JJi7gU4FWsJkG4FGCfkvd2+io1+
    OwIDAQAB
    -----END PUBLIC KEY-----
    
  • 私钥示例:

    -----BEGIN PRIVATE KEY-----
    MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDNEdGwzMZAICjr
    sEdFHuSsgY3ZXhZxypy4o3Q9k5Jhh82YniyBmBcxVQuFiIcDcXoNJqWuKskANPJ0
    省略。。。。。。
    -----END PRIVATE KEY-----
    

4.3.2 Hex编码

二进制密钥转为十六进制字符串,无头尾标识。

  • 公钥示例:

    30820122300d06092a864886f70省略。。。。。。
    
  • 私钥示例:

    308204bd020100300d06092a86省略。。。。。。
    

4.4 公钥解析与结构

解析公钥可获取以下关键参数:

  • 密钥长度(Key Length):如2048位,对应模数长度。

  • 模数 ( n ):两个大质数的乘积,决定密钥长度(如2048位公钥的 ( n ) 为256字节)。

  • 公钥指数 ( e ):通常为 65537 ( 2 16 + 1 ) 65537 (2^{16} + 1) 65537(216+1),因其数学性质高效且安全。

RSA公钥解析生成工具http://tool.chacuo.net/cryptrsakeyparse

案例:

在这里插入图片描述

五、快速识别RSA加密的方法

5.1 密文长度判断

RSA 加密后的密文通常是固定长度的,具体长度取决于密钥大小(例如,1024 位密钥生成 128 字节的密文,2048 位密钥生成 256 字节的密文)。

5.2 验证密文字符集

  • PEM/Base64格式:Base64字符集(A-Z, a-z, 0-9, +, /,可能含=填充)。
  • Hex格式:仅含0-9, a-f

5.3 私钥、公钥、明文、密文长度判断

RSA的私钥、公钥、明文、密文长度也有一定对应关系,可以从这方面初步判断:

私钥长度公钥长度明文长度密文长度
4281281~5388
8122161~117172
15883921~245344

5.4 代码特征识别

RSA的代码会有new一个实例对象的操作:

RSA的代码会有设置密钥的操作:

  • 关键词:setPublicKeysetKeysetPrivateKeygetPublicKey

六、代码实现

6.1 JavaScript实现RSA加密解密

node-rsa 是一个流行的 Node.js 模块,用于实现 RSA 加密解密操作。下面我将展示如何使用这个模块生成密钥对、加密字符串和解密字符串。

const NodeRSA = require('node-rsa');

// 1. 初始化RSA对象,生成密钥对(默认2024位)
const key = new NodeRSA({ b: 2024 });
const publicKey = key.exportKey('pkcs8-public-pem'); // 导出公钥(PKCS#8格式)
const privateKey = key.exportKey('pkcs8-private-pem'); // 导出私钥(PKCS#8格式)

// 2. 原始字符串
const originalText = 'Hello RSA加密测试!';

// 3. 加密函数(支持返回Base64和Hex格式)
function encryptData(text, publicKey) {
  const encryptor = new NodeRSA(publicKey, 'pkcs8-public-pem');
  const bufferEncrypted = encryptor.encrypt(text, 'buffer'); // 加密为Buffer
  return {
    base64: bufferEncrypted.toString('base64'), // Base64编码
    hex: bufferEncrypted.toString('hex')        // Hex编码
  };
}

// 4. 解密函数(支持Base64和Hex格式输入)
function decryptData(encryptedData, privateKey) {
  const decryptor = new NodeRSA(privateKey, 'pkcs8-private-pem');
  let bufferData;
  if (encryptedData.base64) {
    bufferData = Buffer.from(encryptedData.base64, 'base64');
  } else {
    bufferData = Buffer.from(encryptedData.hex, 'hex');
  }
  return decryptor.decrypt(bufferData).toString('utf8');
}

// 5. 执行加密
const encrypted = encryptData(originalText, publicKey);

// 6. 执行解密
const decryptedBase64 = decryptData({ base64: encrypted.base64 }, privateKey);
const decryptedHex = decryptData({ hex: encrypted.hex }, privateKey);

// 7. 输出结果
console.log('============ 原始数据 ============');
console.log('原始字符串:', originalText);
console.log('\n============ 密钥 ============');
console.log('公钥:\n', publicKey);
console.log('\n私钥:\n', privateKey);
console.log('\n============ 加密结果 ============');
console.log('Base64密文:', encrypted.base64);
console.log('Hex密文   :', encrypted.hex);
console.log('\n============ 解密结果 ============');
console.log('Base64解密:', decryptedBase64);
console.log('Hex解密   :', decryptedHex);

运行结果:

============ 原始数据 ============
原始字符串: Hello RSA加密测试!

============ 密钥 ============
公钥:
 -----BEGIN PUBLIC KEY-----
MIIBHjANBgkqhkiG9w0BAQEFAAOCAQsAMIIBBgKB/gDFWpuQFSWcvf/QzX/NAgc2
FkZa2JSOOTRCXH84X+IdQST3+MAA2v912ibY/tQZhxPbTZy1blNvATxE2a4+Z/2U
YhGtFNe2uYoBb2oCUvM2uOE6S4pYm8slaQrLgciOM6lloo9EG6wDkOYaUpdYU8bZ
Yy2B6aaDqblngXeM1IDDqAfiU+W9/Ro3m+Az3irI/jA2CLndbxk0OIOZt7XzDbS0
TmwGumXusYOukYvLvDX3GkN0l+WjBf3ZgW/6vxnAJy0FPDf/DTgIOIXOdXx9AvnA
hFkI3rEJG+dKG41hlI+UHiCrbpKEDzL9Ok387sPu4VO4LHgEVnyWVxKoll0nAgMB
AAE=
-----END PUBLIC KEY-----

私钥:
 -----BEGIN PRIVATE KEY-----
MIIEqAIBADANBgkqhkiG9w0BAQEFAASCBJIwggSOAgEAAoH+AMVam5AVJZy9/9DN
f80CBzYWRlrYlI45NEJcfzhf4h1BJPf4wADa/3XaJtj+1BmHE9tNnLVuU28BPETZ
rj5n/ZRiEa0U17a5igFvagJS8za44TpLilibyyVpCsuByI4zqWWij0QbrAOQ5hpS
l1hTxtljLYHppoOpuWeBd4zUgMOoB+JT5b39Gjeb4DPeKsj+MDYIud1vGTQ4g5m3
tfMNtLRObAa6Ze6xg66Ri8u8NfcaQ3SX5aMF/dmBb/q/GcAnLQU8N/8NOAg4hc51
fH0C+cCEWQjesQkb50objWGUj5QeIKtukoQPMv06Tfzuw+7hU7gseARWfJZXEqiW
XScCAwEAAQKB/V35ik/use1UUAc2g5+0Uoi/zJqfvQWIWckr0Gygw8QYbCkkKxF9
Nt4AljUICylot9zatT9znIkkNnW2jhErZYWNuUsIvLtG2F9clUcsBqJNIPqoU+Vj
sjVLMpe7YivMj+JUqRHOd3dvPRLVtzmZEvwbDOVqxB636BBQhwPpgKXGkdhpuM0n
L6NIqrP8QVLgSYE82MiNn0l6tE6KJwv4XOQvtiT0llGhj+3mTDIrFzBIx2h1P+aJ
+gpzZqhEqe5upY+qzVA99PDkJKFtXo4W5B4SZ4kD//cpiXYUAochjEUQfMsUV0mX
8RfzARIHMHFLZxf3yX0eV4CuoxdjYvECfw6ehlTgmdjmYECGpKuvPLzfuceA7SH2
vPgorY7waNhD2f+P/e0+zVgvpGBNcEnn176ISn82lc329TEy/L9UiImQcasdcmqH
RoX0xRJ3wT0/UX9J3RWVrtIHituVaBXhYFiDieAHnuh4TNObiuGJRUsWri7xTglg
8ClEQ1n5qN8Cfw1/5iZMLnIzq1nr/qZnki+TqO1I56squcafqGvvOuA8/y55yEGj
3R3MAk4sh8lmoTbSu1VenkQAQUPLz9d7L3p9qaN4lOB7wvkMLfTZHszoCYFM0ES7
MtWvnILB9Ybchpnck9QYtr1q/Uv3bmp/pq8t1FMXI70GlwITrEl7LLkCfwtm8ujC
YNv+GrZZDZhmTd4WNMT4tnsWAZ8fwvZIZc2/ZgjgmrFumSQdzHvcCidqbyfJDymX
PlHtOqHL3buwx+lbQnyus+2IYqXaGdbkllAZ0YuQ5aGPJFHl1hSbvBnMtaNzvJaB
+xvfsDQfDbwIn4YIQ4STakUAWXAmMM29XksCfwhzOd5ZK22i+Cxmc9U32aLcXA6D
5zgWm4lAIU3GxuTcaaNu6bJk3yEqtXq3lxuzmVBW4pqSiqDoQ/IrHuO0IUkcZdaE
wTQvZCE+xXmRex0qVeDQ80FCqJRnw6F5xbXwTnT7RLGr8p9o3Dr0G/KgCvd2yYRl
ZKKLAHV1WQ/6AUkCfw6IsyQku9fz4QiMmmBgdz0Nvf9V+xNYMApEgaWnc12n9mzY
Jw2Lt+PN5wdWGW5sonQX7U5D9Q9Lo7j2MeAaATq9SUknrI9lshD1nK+gthL1OnCJ
VDu1eb2jX+ZZTA3h53sORGbS6I93fdlU/bdDA4d9M0uxaZLvgnvE8zL74SM=
-----END PRIVATE KEY-----

============ 加密结果 ============
Base64密文: bW2ekeodHjflRx9PZALQp5K/OylxtAygehXgBQ15JiEONzmsIXdQZML85rnfKJjnzdwC+qbQC1pYO0XLCkjZBg5R+Pk9iJtm+aWngk1mo6CV5IyS3b4yKIDM7aoH2RfnzoU+zPnOxQTmXBPiMU7efOW6KJzif70pmAb5TeEVzAVWyK/+6sf3v0Sqws0NKY3YjyLKsg6UCnMqFxwOGTePuEghFUH3SWb8eBoJSDkxEHdmCZJbofiRwVSUmn8IM8rr/4Lu0bo3BybgWm98+8n60CQS5freuZO0Zs9akbJU938D+ajgZbgwrA2Xw+tQ8xLncr3hUd05m0BBetLDyA==
Hex密文   : 6d6d9e91ea1d1e37e5471f4f6402d0a792bf3b2971b40ca07a15e0050d7926210e3739ac21775064c2fce6b9df2898e7cddc02faa6d00b5a583b45cb0a48d9060e51f8f93d889b66f9a5a7824d66a3a095e48c92ddbe322880ccedaa07d917e7ce853eccf9cec504e65c13e
2314ede7ce5ba289ce27fbd299806f94de115cc0556c8affeeac7f7bf44aac2cd0d298dd88f22cab20e940a732a171c0e19378fb848211541f74966fc781a0948393110776609925ba1f891c154949a7f0833caebff82eed1ba370726e05a6f7cfbc9fad02412e5fadeb993b466cf5a91b254f77f03f9a8e065b830ac0d97c3eb50f312e772bde151dd399b40417ad2c3c8

============ 解密结果 ============
Base64解密: Hello RSA加密测试!
Hex解密   : Hello RSA加密测试!

七、Python实现实现RSA加密解密

使用 Python 的 cryptography 库实现的等效代码,还原 Node.js 版的功能逻辑:

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.backends import default_backend
import base64
import binascii

# 1. 生成RSA密钥对(2048位)
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)
public_key = private_key.public_key()

# 导出PKCS#8格式的PEM公钥和私钥
private_pem = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.PKCS8,
    encryption_algorithm=serialization.NoEncryption()
).decode('utf-8')

public_pem = public_key.public_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PublicFormat.SubjectPublicKeyInfo
).decode('utf-8')

# 2. 原始字符串
original_text = "Hello RSA加密测试!"


# 3. 加密函数
def encrypt_data(text, public_key_pem):
    # 加载公钥
    public_key = serialization.load_pem_public_key(
        public_key_pem.encode('utf-8'),
        backend=default_backend()
    )

    # 加密数据(使用PKCS1v15填充)
    ciphertext = public_key.encrypt(
        text.encode('utf-8'),
        padding.PKCS1v15()
    )

    return {
        "base64": base64.b64encode(ciphertext).decode('utf-8'),
        "hex": binascii.hexlify(ciphertext).decode('utf-8')
    }


# 4. 解密函数
def decrypt_data(encrypted_data, private_key_pem):
    # 加载私钥
    private_key = serialization.load_pem_private_key(
        private_key_pem.encode('utf-8'),
        password=None,
        backend=default_backend()
    )

    # 解析密文
    if "base64" in encrypted_data:
        ciphertext = base64.b64decode(encrypted_data["base64"])
    else:
        ciphertext = binascii.unhexlify(encrypted_data["hex"])

    # 解密数据
    plaintext = private_key.decrypt(
        ciphertext,
        padding.PKCS1v15()
    )
    return plaintext.decode('utf-8')


# 5. 执行加密
encrypted = encrypt_data(original_text, public_pem)

# 6. 执行解密
decrypted_base64 = decrypt_data({"base64": encrypted["base64"]}, private_pem)
decrypted_hex = decrypt_data({"hex": encrypted["hex"]}, private_pem)

# 7. 输出结果
print("============ 原始数据 ============")
print(f"原始字符串: {original_text}")

print("\n============ 密钥 ============")
print(f"公钥:\n{public_pem}")
print(f"\n私钥:\n{private_pem}")

print("\n============ 加密结果 ============")
print(f"Base64密文: {encrypted['base64']}")
print(f"Hex密文   : {encrypted['hex']}")

print("\n============ 解密结果 ============")
print(f"Base64解密: {decrypted_base64}")
print(f"Hex解密   : {decrypted_hex}")

运行结果:

============ 原始数据 ============
原始字符串: Hello RSA加密测试!

============ 密钥 ============
公钥:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4NX591hKfvtcFG7xoH5z
bcOVeAbqXjzNdApI8hmLJUGdK5SxV6GbNGdrpAAKvyQrlV8kRs512f9zo0yTJW/b
PQOOZyXmGYH/9dmOC7aRZ8Rc9g5TLA2SWXc/lEZug2hP208XcK4+1q0YVy470aco
Mn1QuNqXWz/N1GuKOMYSqp/bFZxixtDsHjPvj4n9fqzGgOBFiFcp9ODIf0ibr4Qh
CYpi9s2OI+NakA1PyThFMb12ps6D0i8w1jIf7POsBHhPC23zN53IUqRK6CzoiymF
eFLwYaGjRmlnu+Nis5U4PtrDAFKd0//JzA0CxgpCLTe7CjnH28KLrHF8dBSROUm0
JQIDAQAB
-----END PUBLIC KEY-----


私钥:
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDg1fn3WEp++1wU
bvGgfnNtw5V4BupePM10CkjyGYslQZ0rlLFXoZs0Z2ukAAq/JCuVXyRGznXZ/3Oj
TJMlb9s9A45nJeYZgf/12Y4LtpFnxFz2DlMsDZJZdz+URm6DaE/bTxdwrj7WrRhX
LjvRpygyfVC42pdbP83Ua4o4xhKqn9sVnGLG0OweM++Pif1+rMaA4EWIVyn04Mh/
SJuvhCEJimL2zY4j41qQDU/JOEUxvXamzoPSLzDWMh/s86wEeE8LbfM3nchSpEro
LOiLKYV4UvBhoaNGaWe742KzlTg+2sMAUp3T/8nMDQLGCkItN7sKOcfbwouscXx0
FJE5SbQlAgMBAAECggEBAKHksacO5iVlLTpxYH8mTktdJ8VThXLx6SaDOV9KUU00
X82/tarZ7P3g8jsW5KYZj2BxL5fkliuwqz2Mp++vCXh3lRRkz7jSSNJoIsYAYdcM
J7vtOKph412UZi2IQY9Rjx7lZoV2kjzWSs6LtfsSl/kzDursS0wjNzybat3SkiJU
ussQ5xmFRFuRPmjN/RmMsiCj/ymglQAQjzmUv4ergBfm8LLh3fdOgKz+qIEIFNPc
oPW1a0pUfk9Ehv++EAqZehFZVwZ0gT5snIhtOqu6O1VYlqT5UcC8tF+grb7y26Iu
VT6Ns2M1vjKeaBqz/OQrhTYk3Jv5Pu6xkW7yHPo6WckCgYEA/bZt/SKJNnkgJ2pG
WG0Nk6lC6GuLOZYNCNNWgf7mzpzZJPdqwPO9GlIBhGJl7e3Dx/P9igGiP+Q3sAtv
HuutJFD3f81n/2psIu0L5gksyBOGgNWjUJP8wQTTJ6L/tKO8fYfsg23fI8oZ44ls
ik7n0VVMnXtTKUhvHDTPgMaYGQcCgYEA4tzmJcniJUjH0qMTawv98L/G8Ojvqe4n
oc0wg1Ij3v9MrCq/1WUdiedyagxoTpYGLUfhCfXf+I1dKxpVCo9RqChtnfrGWTyD
C/5q7x/5/TQVZoAihlSlwiFwhpTDao8eXH0aPfATeB89olxk/3cQSxXK62wAcM9w
27x9QWwGWnMCgYAmGel2pGMazSHpCWq7CNWLIVYs9UmZQlF+y84oA5HB4Ygypv1f
MLtrYnlb2jMYgiZuttOSkCA/nBRI2c68RARiec5RYRWHJAJNVG//Ac251kTSwEKg
bTj9+62CPFZOWHCMIYeBTVS/WTB+HTsxohvqMfcph0W742bcQ4oN+sUIrQKBgEL3
1nB9Qeajr2j8frTw20uAMSfYezb8eHKI8bMyQiiH0IhaLjq+GJQm4F1xwDDClJw1
Rbb8/9qNUF1y7nuphv9Ov90MtBSPile2CLcCB3e5MkAJvydMQYom+OKhc3Y3PU0s
GN0Dy5uADV+qSp4m9YZUrowEW7TxZ21WHNt9GfsFAoGBAKbymIBXeeIHJgCvDjAX
1HjJWY1LuNYAvVn6kiP8ofUJe9pepDXF6KY1Zk2scyyzWpXQsHcPEc2SnnlE2Gyf
OTR+3cCUZNnaUSVaG67WtlDxJ6RZ03MNGFIT+Kqh4+7Hz/MQDkXcdl8si1OpbGFy
bSPTiMRw21j0iOFjAIyG3r6O
-----END PRIVATE KEY-----


============ 加密结果 ============
Base64密文: cWP48wJ9kavs3ihFPtP2p1PNDRkNoAtQx0lLJIB7cmKWjQOEuECHBSxvx01wkLBXjnVZSDwe86oDZJU539LJdB8sQmnA2v9jz+XqKoXtJxxg3v0oWAmU0t6EtsDMJXZ/7IUXIFWnQrZbOLfjNZv8kB2RqpikDEHWG3jWCxT6vr/EwvgztHhaEzXvWnsYK1OMQT9sbLSCzIkecWgpQ+L9dyvM4l19W8D6MzjlBqzSeSJqbKrOUTb2r5aeERpOPhQWx9CVWjC9puYQ9APJqH1HvKXlEpX4PSrWCwf6YaVEI6NuI9s3+4EzAHF4mQz1uaaAAHqmO45jNWTjnzmLoofZig==
Hex密文   : 7163f8f3027d91abecde28453ed3f6a753cd0d190da00b50c7494b24807b7262968d0384b84087052c6fc74d7090b0578e7559483c1ef3aa03649539dfd2c9741f2c4269c0daff63cfe5ea2a85ed271c60defd28580994d2de84b6c0cc25767fec85172055a742b65b38b7e3359bfc901d91aa98a40c41d61b78d60b14fabebfc4c2f833b4785a1335ef5a7b182b538c413f6c6cb482cc891e71682943e2fd772bcce25d7d5bc0fa3338e506acd279226a6caace5136f6af969e111a4e3e1416c7d0955a30bda6e610f403c9a87d47bca5e51295f83d2ad60b07fa61a54423a36e23db37fb8133007178990cf5b9a680007aa63b8e633564e39f398ba287d98a

============ 解密结果 ============
Base64解密: Hello RSA加密测试!
Hex解密   : Hello RSA加密测试!

七、RSA扣网站代码技巧(重点)

7.1 RSA加密的代码行数

RSA加密的代码行数:2000-25000,少于2000肯定不是或者不全。

7.2 扣加密步骤流程

第一步:找到new一个实例对象的地方:

var xxx = new JSEncrypt() //rsa的加密对象

注意事项:加密对象名称不一定一定就叫JSEncrypt,还可以叫JSEncryptExports、Encrypt等等

加密对象有四种定义方式:

  • var JSEncrypt = function (a) {}:搜索 var JSEncrypt

  • JSEncrypt:function (a) {}:搜索 JSEncrypt:

  • xxx.proxxx.JSEncrypt = function (a) {}:搜索.JSEncrypt =

  • 逗号连定义xxx,JSEncrypt:搜索 ,JSEncrypt

第二步:找到设置密钥的地方

xxx.setPublickey
  • 这个也可以作为特征码,直接搜索关键词:setPublicKeysetKeysetPrivateKeygetPublicKey

第三步:找到调用加密方法的地方

xxx.调用加密方法("明文")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值