经常看到有人要找AES
-GCM
-128
这个算法加解密 网上相关的文档也较少其中在telegram登录首页就在使用该算法 应该让不少哥们头疼
其实这个
加密常见于浏览器内置接口
window.crypto.subtle
该接口不仅支持该类型的
加密 且支持非常多的算法
加密如
RSA
等等 这里就演示AES
-GCM
-128
crypto-AES
-GCM
-128调用例子
function ___
crypto__test(keyData, iv, data) {
const format = "raw",
// keyData = new Uint8Array([23, 113, 57, 6, 35,
-69,
-60, 98, 84,
-17,
-125,
-49, 18, 6,
-92, 32]),
algorithm = "AES
-GCM",
extractable = true,
usages = ["encrypt", "decrypt"];
// iv = new Uint8Array([47, 46, 123, 78, 36, 14, 109, 50, 121, 64, 11, 38]);
window.crypto.subtle.importKey(
format,
keyData,
algorithm,
extractable, usages
)
.then(key =gt; {
window.crypto.subtle.encrypt({
name: algorithm,
iv: iv
)
.then(result =gt; {
console
.log(Array
.from(new Uint8Array((result))))
console
.log(___
crypto__test(
new Uint8Array([23, 113, 57, 6, 35,
-69,
-60, 98, 84,
-17,
-125,
-49, 18, 6,
-92, 32]),
new Uint8Array([47, 46, 123, 78, 36, 14, 109, 50, 121, 64, 11, 38]),
new Uint8Array([50, 49, 48])
crypto主要相关接口介绍
crypto.subtle.importKey
const result =
crypto.subtle.importKey(
format,
keyData,
algorithm,
extractable,
usages
format
是一个字符串,描述要导入的密钥的数据格式。可以是以下之一:
----------raw:原始格式。
----------pkcs8:PKCS#8格式。
----------spki:SubjectPublicKeyInfo格式。
----------jwk:JSON Web密钥格式。
keyData
是ArrayBuffer,TypedArray,a DataView或JSONWebKey包含给定格式的键的对象。
algorithm
是一个字典对象,用于定义要导入的密钥的类型并提供额外的算法特定参数。对于
RSASSA
-PKCS1
-v1_5,
RSA-PSS或
RSA-OAEP:传递
RsaHashedImportParams对象。对于ECDSA或ECDH:传递 EcKeyImportParams对象。对于HMAC:传递一个HmacImportParams对象。对于AES
-CTR,AES
-CBC,AES
-GCM或AES
-KW:传递标识算法的字符串或形式为的对象{ "name": ALGORITHM },其中ALGORITHM 是算法的名称。对于PBKDF2 :传递字符串PBKDF2。
extractable
是Boolean表明它是否将有可能使用到导出密钥
SubtleCrypto.exportKey()或
SubtleCrypto.wrapKey()。
密码学我了解的很少,但是在逆向中这却是非常重要的基础。这个
Crypto函数库是
windows自带的,我实现了散列算法MD5[128位], 对称
加密算法AES[256位]以及
RSA算法。散列函数实现改几个参数就能成SHA算法了。
1
. MD5
// 单向散列函数
BOOL OneWayHash(PBYTE pData, DWORD dwSize, ALG_ID cType)
HCRYPTPROV hCryptProv = NULL;
HCRYPTHASH hCryptHash = NULL;
参考:https://developer
.mozilla
.org/zh
-CN/docs/Web/API/
SubtleCrypto
什么是
SubtleCrypto
SubtleCrypto接口提供了许多底层
加密功能, 可以使用它来进行
加密和密钥管理
创建
SubtleCrypto对象
# 注意是小写的
crypto
var cpt =
crypto.subtle;
Chrome Console 测试如下
在JS中经常使用Math.Random|()函数来产生随机数,但这个函数产生的随机数并不具有真正的随机性,而且加密型不够强。因此在特定的需要加密性强的安全随机数时,可以使用JS提供的windows.crypto来生成随机数。
Window.crypto只读属性返回与全局对象关联的 Crypto对象。 这个对象允许网页访问某些加密相关服务。
为了确保足够的性能,不使用真正的随机数生成器,但是它们正在使用具有足够熵值伪随机数生成器。它所使用的 PRNG 的实现与其他不同,但适用于加密的用
1、md5加密:前端可以加密,不可以解密
2、crypto加密: 前端可加密、解密常用于“记住密码”, 存cookie
import CryptoJS from "crypto-js";
//设置cookie
setCookie(portId, psw, exdays) {
// Encrypt,加密账号密码
const userName = CryptoJS.AES.encrypt(
portId+'',
"secretkey123"