- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码来测试 WebCrypto API。它适用于 Firefox 和 Chrome,我正在尝试使其适用于 Safari。
function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint16Array(buf));
}
//converts a forge 0.6.x string of bytes to an ArrayBuffer
function str2ab(str) {
var b = new ArrayBuffer(str.length);
var view = new Uint8Array(b);
for(var i = 0; i < str.length; ++i) {
view[i] = str.charCodeAt(i);
}
return b;
}
function _arrayBufferToBase64( buffer ) {
var binary = '';
var bytes = new Uint8Array( buffer );
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode( bytes[ i ] );
}
return window.btoa( binary );
}
var pubKey;
var privKey;
var s_pubKey="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5tieEkcDAqAp/baSmNIdg5ezJMcWJX63+hM/DQolgKtw9Dvc0c8GRUqK2r/idZ1iXJzOjWQ3KIFIzmgTRHOKe3aPgJADdZ2vyAqu2woKtsgQ8nTcDYI86dmyfYsHFbgbSn/qeoE8WEzwyT3OoGgn54zoMuQmUmLbGaJYY2XN5bxwqxsRJSoXetBu9o1G9Wy4V1fdxwjRtaO/2FrZfkLp/P5Tc5Hk1Ev7PIPrkRhrl/7lF4JblVRG5m90aeviErvFIN0LdlqiY90UaQY3gyTsylrheTlqRq6yyzKf3dWnF78+CeAqppsOMI+WHURThNLkN56EOTX6TaBrG6f2XjxeqQIDAQAB";
var cripto= window.crypto || window.msCrypto;
var subtle= cripto.subtle || window.crypto.webkitSubtle;
subtle.generateKey(
{
name: "RSA-OAEP",
modulusLength: 2048, //can be 1024, 2048, or 4096
publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
hash: {name: "SHA-256"}, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512"
},
true, //whether the key is extractable (i.e. can be used in exportKey)
["encrypt", "decrypt"] //must contain both "encrypt" and "decrypt"
)
.then(function(key){
//returns a keypair object
//console.log(key);
//console.log(key.publicKey);
//console.log(key.privateKey);
subtle.exportKey(
"jwk", //can be "jwk" (public or private), "spki" (public only), or "pkcs8" (private only)
key.publicKey //can be a publicKey or privateKey, as long as extractable was true
)
.then(function(keydata){
//returns the exported key data
console.log("publicKey:"+_arrayBufferToBase64(keydata));
subtle.exportKey(
"jwk", //can be "jwk" (public or private), "spki" (public only), or "pkcs8" (private only)
key.privateKey //can be a publicKey or privateKey, as long as extractable was true
)
.then(function(keydata){
//returns the exported key data
console.log("privateKey:"+_arrayBufferToBase64(keydata));
});
subtle.importKey(
"jwk", //can be "jwk" (public or private), "spki" (public only), or "pkcs8" (private only)
keydata,
{ //these are the algorithm options
name: "RSA-OAEP",
hash: {name: "SHA-256"}, //can be "SHA-1", "SHA-256", "SHA-384", or "SHA-512"
},
false, //whether the key is extractable (i.e. can be used in exportKey)
["encrypt"] //"encrypt" for public key import, "decrypt" for private key imports
)
.then(function(publicKey){
//returns a publicKey (or privateKey if you are importing a private key)
console.log(publicKey);
subtle.encrypt(
{
name: "RSA-OAEP",
//label: Uint8Array([...]) //optional
},
publicKey, //from generateKey or importKey above
str2ab("hola mundo") //ArrayBuffer of data you want to encrypt
)
.then(function(encrypted){
//returns an ArrayBuffer containing the encrypted data
//console.log(new Uint8Array(encrypted));
console.log("enc: "+_arrayBufferToBase64(encrypted));
})
.catch(function(err){
console.error(err);
});
})
})
})
.catch(function(err){
console.error(err);
});
问题是 subtle.encrypt 显然没有被执行。 console.log 和 console.error 都没有被调用。任何线索发生了什么?上一行“console.log(publicKey);”工作正常。
最佳答案
当前版本的 Safari、Safari Technology Preview 和 WebKit 不支持 RSA-OAEP-256。它们仅支持带有 SHA-1 的较旧的 RSA-OAEP:
关于javascript - Safari WebCrypto API RSA-OAEP 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31798241/
我是 GUN 的作者,我喜欢你的作品! 我对应该使用哪些库,或者哪些库相互依赖感到有点困惑: node-webcrypto-ossl 网络加密 webcrypto-core node-webcrypt
我在使用 PBKDF2 和 Webcrypto 时遇到问题。我想将 PBKDF2 与 SHA-1 算法一起使用。目前,我有, const ENCODING = "utf-8"; const HMACS
我正在使用 JavaScript WebCrypto API。我需要做下一个序列: 生成RSA-PSS key 对; 使用 AES-GCM 封装私钥; 有机会展开第 2 步的结果。 我知道我必须存储来
使用 JavaScript 和 WebCrypto API(没有任何外部库),使用从用户提交的密码派生的 key 加密字符串的最佳方法是什么? 这是一些代码,其中 key 不是派生的,而是由 gene
我正在评估 WebCrypto 性能与第三方加密库的比较 SJCL和 Forge .我希望 WebCrypto 快得多,因为它是 native 浏览器实现。这也是benchmarked before并
我正在使用 Web Crypto API并且正在使用 generateKey 生成 RSA key 对功能。由于我的代码中的一些错误,我删除了一些用户的公钥。我想知道是否有任何方法可以从私钥生成公钥?
我读过这篇文章document通过ECDH-CURVE25519算法生成 key 对。但是当我在 window.crypto.subtle.generateKey 中指定 ECDH-CURVE2551
我尝试使用静态 RSA 公钥来加密 session 生成的 AES key ,然后使用该 key 加密密码,并且输入 RSA 加密密码的随机生成的 AES session key 有以下错误消息: T
我正在尝试使用 WebCrypto API 加密大文件 (> 1GB) . 加密小文件效果很好,但是当我尝试加密大文件时,我的浏览器挂起,似乎加密从未完成。 我认为最好的选择是读取和加密文件的 blo
是否可以使用字符串作为加密 key 并仅使用 WebCryptoAPI 来加密 CryptoKey(私钥)?我实现了一个功能,但出现以下错误: Uncaught (in promise) DOMExc
我的应用程序密码学目前使用 forge用于加密、解密、派生 key 和导入 key 的库。我最近开始阅读有关 the new cryptographic features that are part
我正在使用 webcrypto API 成功地加密服务器和客户端之间的消息(假设我需要手动执行此操作)。 我的问题是我需要检查用户和服务器的 key 对是否已经存在,而不是一直生成新的 key 对。有
我正在使用 Node v17.4 并想使用 webcrypto API。基于 this example我正在尝试导入 subtle进入我的项目,但 TypeScript 出现错误 Property '
在 Chrome 中这失败了: window.crypto.subtle.generateKey( { name: "RSA-OAEP", modulusLen
我想做的是在网络浏览器中使用 SubtleCrypto.encrypt() 提供的 128 位 AES-CBC 加密来加密 16 字节数据包。 我期望找到 16 字节输入的 16 字节加密数据。 我实
我正在使用 Webcrypto API 在客户端进行一些加密工作。尽管我无法包装和解开 key ,但浏览器总是返回以下错误。 DOMException [OperationError: "The op
有没有什么方法可以使用 javascript cryto Api 为多个公钥加密数据(这样多个 key 所有者可以使用他们的私钥解密数据)。 如果使用 RSA-OAEP 无法做到这一点,您能否提出相同
我正在尝试使用 webcrypto 加密并在 php 中使用 openssl 解密。要在 php 中解密,我需要一个身份验证标签。有没有一种方法可以从密文中提取它,或者我可以通过其他任何方式获取它?
所以,我开始研究 WebCrypto API,因为它看起来非常快,api 使用起来相当简单,而且我设法很容易地实现了加密/解密。 现在我想看看是否可以使用它进行渐进式加密/解密。我目前使用 Crypt
我确实发现 IE11 支持网络加密 API。是否可以通过 Javascript 使用此 API 访问浏览器商店中的 key ?我找不到任何接口(interface)。 最佳答案 不幸的是,这是不可能的
我是一名优秀的程序员,十分优秀!