惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
aimingoo的专栏
aimingoo的专栏
IT之家
IT之家
G
Google Developers Blog
爱范儿
爱范儿
博客园 - 司徒正美
Recent Announcements
Recent Announcements
The Register - Security
The Register - Security
J
Java Code Geeks
The Cloudflare Blog
M
MIT News - Artificial intelligence
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Security Blog
Microsoft Security Blog
博客园 - Franky
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
小众软件
小众软件
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
T
Troy Hunt's Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Hacker News: Front Page
H
Help Net Security
S
Security @ Cisco Blogs
V
V2EX
Security Archives - TechRepublic
Security Archives - TechRepublic
Stack Overflow Blog
Stack Overflow Blog
O
OpenAI News
L
LINUX DO - 最新话题
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Secure Thoughts
Help Net Security
Help Net Security
F
Full Disclosure
博客园 - 叶小钗
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
K
Kaspersky official blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
Scott Helme
Scott Helme

高金的博客

人机协作逆向:用 AI + Frida 打通微信 4.1.8 macOS 数据库密钥提取 情绪价值与求真:如何平衡与应对? friend_tech 第一笔交易只能买 1 个key? friend_tech 套利到底有多卷 无公网ip,无服务器实现内网穿透 植物挖矿 浏览器环境检测 使用tensorflow识别验证码 POW与反爬虫 appium 安卓无法点击搜索框解决办法 知乎直播弹幕抓取与解析 知乎直播套利分析 1000刀+的羊毛在等你 如何创建一个完全匿名的EOS、ETH账号 如何通过技术手段证明"我"没有去过武汉 XUNTA 季度报告 玩游戏不如CX,JUSTGAME邀请分析(内附元数据) 如何在conflux上部署合约 程序员找对象聚合平台-xunta.today EOS 1.8 bidname的漏洞分析
加密、编码相关知识汇总
Gao JIn · 2020-05-18 · via 高金的博客

加密、编码相关知识汇总

ascii

js

1
2
3
4
var str = "A";
str.charCodeAt();

String.fromCharCode(65);

python

1
2
3
4
s = 'A'
print(ord(s))

print(chr(65))

base64

js

1
2
3
4
window.btoa("python123") 

window.atob("cHl0aG9uMTIz")

python

1
2
3
4
5
import base64

base64.b64encode(b'python123')

base64.b64decode(b'cHl0aG9uMTIz')

AES

js

https://github.com/brix/crypto-js 基于这个库

参考 https://cryptojs.gitbook.io/docs/#ciphers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var CryptoJS = require("crypto-js");


var password = 'dahsjhfjakhfjksdsssss1sx'
var iv = 'fdshgjdsngjknaaa'


var encrypted = CryptoJS.AES.encrypt("helloworld", password);
var decrypted = CryptoJS.AES.decrypt(encrypted, password);
console.log('encrypted: ', encrypted.toString())
console.log('decrypted: ', decrypted.toString(CryptoJS.enc.Utf8))



var encrypted1 = CryptoJS.AES.encrypt("helloworld", password, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var decrypted1 = CryptoJS.AES.decrypt(encrypted1, password, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log('encrypted1: ', encrypted1.toString())
console.log('decrypted1: ', decrypted1.toString(CryptoJS.enc.Utf8))




CryptoJS supports the following modes:

  • CBC (the default)
  • CFB
  • CTR
  • OFB
  • ECB

And CryptoJS supports the following padding schemes:

  • Pkcs7 (the default)
  • Iso97971
  • AnsiX923
  • Iso10126
  • ZeroPadding
  • NoPadding

python

https://pypi.org/project/pycrypto/ 基于这个库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from Crypto.Cipher import AES

password = 'dahsjhfjakhfjksdsssss1sx'
iv = 'fdshgjdsngjknaaa'



pad = lambda s: s + (16 - len(s)%16) * chr(16 - len(s)%16)

obj = AES.new(password,AES.MODE_CBC,iv)
encrypted = obj.encrypt(pad("helloworld").encode("utf8"))
print(encrypted)


obj2 = AES.new(password, AES.MODE_CBC, iv)
print(obj2.decrypt(encrypted))

RSA

js

使用的js库 是 https://github.com/travist/jsencrypt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
var publicKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSLffg4ztiN4J7eSWhw3kIrrsM
5IMnkYMAxJgWDaIXwo7mJRpCdYkQtxLPnbE+zFklL1BLS923MFtAz5uLpIkf0LiV
YoaAdGMMVfEfusnW8GcWPMse/0jMZkb9RdSI7othUETJNYadUdBQ2tZoGryHJ6N2
DU7RVvt+6KiysCGbXQIDAQAB
-----END PUBLIC KEY-----`

var priveteKey = `-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDSLffg4ztiN4J7eSWhw3kIrrsM5IMnkYMAxJgWDaIXwo7mJRpC
dYkQtxLPnbE+zFklL1BLS923MFtAz5uLpIkf0LiVYoaAdGMMVfEfusnW8GcWPMse
/0jMZkb9RdSI7othUETJNYadUdBQ2tZoGryHJ6N2DU7RVvt+6KiysCGbXQIDAQAB
AoGBAMvW2Ti6KLWwsFOfwueH9LJ/A9oVJT4S2cK85+M7haEViBGcmkMqSqxzYUMJ
5QTKmwp9QJpGEdnAhD/vGSPthy4ZfaLLSDqjHgrSAVLTUp8ol1/n5V0G40EjvRWc
l4FKx8yHDcsOhkk4LcBDJnUCkZW5t+td8eASewtTMmFHDV3hAkEA859JvI881KoM
u5hCYBdIkSTsmjZdz68LTxDF3eB9Wgdsk4FS+OYkujl6+pch1fXIgjycs8V5eb6H
9QS8SHE/+wJBANzbs/IX2TcIPU6T4AKMt9QI/+lA/baLD6aaznxs8uvlVQ1XF6Y2
G91imkM0YgobSvUgleswWvjfJPicoVWeOocCQDTUoiTl2wczKTe1OQ+lfPMc0sJO
b+GN0CIBPSd0ezp+yajjLp8TKXvI40ZcZ9YCSs0TX9gMRt+D1e/oavw6sukCQCEd
5I6hmtWQq7iznbxkI1BtBQqRzzlnArLFtb6ci5Rpr+YvMAGhTW5V0bHQEf9X9lZp
S3GXr5xvwVhyDBMNhdMCQQCgVI/9jnc5WW7M9vMxNjxIJ1/LD0G58A31pj0SM0rA
UlRz95QGWJ93+SA2fzM45NgjbTD7IOZ5O7GfBSEjSok5
-----END RSA PRIVATE KEY-----`



global.navigator = {
appName: 'nodejs'
};
global.window = {};
const JSEncrypt = require('jsencrypt').default;

const crypt = new JSEncrypt({
default_key_size: 512
});


const rawStr = 'helloworld'

const n1cypt = new JSEncrypt();
n1cypt.setPublicKey(publicKey);
const encrptStr = n1cypt.encrypt(rawStr);

const n2cypt = new JSEncrypt();
n2cypt.setPrivateKey(priveteKey);
const decryptStr = n2cypt.decrypt(encrptStr);

console.log(rawStr, '\n', encrptStr, '\n', decryptStr);



python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42


from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKCS1_v1_5

private_key = """-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDSLffg4ztiN4J7eSWhw3kIrrsM5IMnkYMAxJgWDaIXwo7mJRpC
dYkQtxLPnbE+zFklL1BLS923MFtAz5uLpIkf0LiVYoaAdGMMVfEfusnW8GcWPMse
/0jMZkb9RdSI7othUETJNYadUdBQ2tZoGryHJ6N2DU7RVvt+6KiysCGbXQIDAQAB
AoGBAMvW2Ti6KLWwsFOfwueH9LJ/A9oVJT4S2cK85+M7haEViBGcmkMqSqxzYUMJ
5QTKmwp9QJpGEdnAhD/vGSPthy4ZfaLLSDqjHgrSAVLTUp8ol1/n5V0G40EjvRWc
l4FKx8yHDcsOhkk4LcBDJnUCkZW5t+td8eASewtTMmFHDV3hAkEA859JvI881KoM
u5hCYBdIkSTsmjZdz68LTxDF3eB9Wgdsk4FS+OYkujl6+pch1fXIgjycs8V5eb6H
9QS8SHE/+wJBANzbs/IX2TcIPU6T4AKMt9QI/+lA/baLD6aaznxs8uvlVQ1XF6Y2
G91imkM0YgobSvUgleswWvjfJPicoVWeOocCQDTUoiTl2wczKTe1OQ+lfPMc0sJO
b+GN0CIBPSd0ezp+yajjLp8TKXvI40ZcZ9YCSs0TX9gMRt+D1e/oavw6sukCQCEd
5I6hmtWQq7iznbxkI1BtBQqRzzlnArLFtb6ci5Rpr+YvMAGhTW5V0bHQEf9X9lZp
S3GXr5xvwVhyDBMNhdMCQQCgVI/9jnc5WW7M9vMxNjxIJ1/LD0G58A31pj0SM0rA
UlRz95QGWJ93+SA2fzM45NgjbTD7IOZ5O7GfBSEjSok5
-----END RSA PRIVATE KEY-----"""

public_key = """-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSLffg4ztiN4J7eSWhw3kIrrsM
5IMnkYMAxJgWDaIXwo7mJRpCdYkQtxLPnbE+zFklL1BLS923MFtAz5uLpIkf0LiV
YoaAdGMMVfEfusnW8GcWPMse/0jMZkb9RdSI7othUETJNYadUdBQ2tZoGryHJ6N2
DU7RVvt+6KiysCGbXQIDAQAB
-----END PUBLIC KEY-----"""

msg = "helloworld"

keyPub = RSA.importKey(public_key)
cipher = Cipher_PKCS1_v1_5.new(keyPub)
cipher_text = cipher.encrypt(msg.encode())
print("cipher text->", cipher_text)


keyPriv = RSA.importKey(private_key)
cipher = Cipher_PKCS1_v1_5.new(keyPriv)
decrypt_text = cipher.decrypt(cipher_text, None).decode()
print("decrypted msg->", decrypt_text)
assert msg == decrypt_text


本文作者:高金
本文地址https://igaojin.me/2020/05/18/爬虫加密、编码相关知识汇总/
版权声明:转载请注明出处!

推荐文章