我在基本加密/解密方面遇到了麻烦.我一直在寻找一个有效的例子,但还没有找到一个有效的例子.
- 我将在php中进行加密,使用cryptoj解密以获得一小部分安全性
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js">
<?
$text = "this is the text here";
$key = "encryptionkey";
$msgEncrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND));
$msgBase64 = trim(base64_encode($msgEncrypted));
echo "<h2>PHP</h2>";
echo "<p>Encrypted:</p>";
echo $msgEncrypted;
echo "<p>Base64:</p>";
echo $msgBase64;
?>
<p>AES Decrypt</p>
<script>
var key = 'encryptionkey';
var encrypted = "<?php echo $msgBase64 ?>";
//tried var base64decode = CryptoJS.enc.Base64.parse(encrypted);
var decrypted = CryptoJS.AES.decrypt(encrypted, key);
console.log( decrypted.toString(CryptoJS.enc.Utf8) );
</script>
Run Code Online (Sandbox Code Playgroud)
我错过了哪一步?
我能用Ruby解密AES加密消息,如下所示:
require 'openssl'
require 'base64'
data = "IYkyGxYaNgHpnZWgwILMalVFmLWFgTCHCZL9263NOcfSo5lBjAzOZAtF5bF++R0Bi+9c9E+p3VEr/xvj4oABtRWVJ2wlWzLbYC2rKFk5iapFhb7uZCUpO4w4Su3a5QFa2vInjYueziRoqySZd/DpstMJ8rsJ94VGizFFFZ1l0sw1ax+wfBAv5+wHs/hlnHi/ea66KBO3rgXKahvV28h+4bh5etc8RCrmiiNbfg6Oj0jQJDjdYIdW8T9YPOI9E1hih8lbfRnMWcOFJgYekfLpoy5LI525UGnlM46J1k6ekLqsn9FqvbiOOoLgqa4YqBm1i9P0ePyjkME+t+RiL8xXX+ItgOYr9G7kM64wlTJPCW8B/crmUdmGzQNC/hD/u/8wfHBS2f8u6OtQMG/+Kpk1oju8lcUZGI/4S8A6/OuktvQr2zgnbs2aADMrM37Oait/pJ3G73S7NwVT8EaK+X43c0C/fUvW2/bD/rqCNpAh9WQlz4Cj6JHwjbmwuind6aCimF1tHjXuR9FXu+g17sPT4ZkKZ6aeBG+m170XdCGn2hVM0wH1rh3VeCG2u/JFqfuGKGSoqeHeNY/icu9pEhtZDzHd7aPoaMXcWvXC9PjooBf7GM1EPacSdnon1kBobjtKSt1l15DjO5TMrJoX7VO7GotQwo+uI/u5Kop01hBXxyxyggl1/8N0ESohPJoqLDrIwvbGK5kW4B49FVPnx9CMvjZDdSsoxPAh+hx6SPe8Hj0Nx4bRs06cbtOkte/V8QSYIqjiJDleEqPrdiKlvgToZz9L29ZR/3Ln65qU1sq7q9c0SEYxIopV7TdTjFS7y76zDPFZkhzc3DjfLtJo/M1hdtt648APcZdmAIgWH6fh3eJZ0qbiPh8RStYH7I2COmnlMw4+t/B5mlhYVSgwPK2Ir736Mh+P9Bw0fF8r9Ghhs4AJzpU0RiK9d1tCsrLfK/hSRwTXhtsSB6eDWEGkO7oeEIz43mgn0sv3SrA9JNHzYkg="
key = "2e35f242a46d67eeb74aabc37d5e5d05"
aes = OpenSSL::Cipher::Cipher.new('aes-128-cbc')
aes.decrypt
aes.key = key.scan(/../).collect{ |x| x.hex }.pack('c*')
aes.iv = Base64.decode64(data)[0...16]
puts aes.update(Base64.decode64(data)[16..-1]) + aes.final
# => JSON data...
Run Code Online (Sandbox Code Playgroud)
作为CryptoJS的新手,我没有把工作替代方案放在一起.这是我到目前为止所做的:
data = "IYkyGxYaNgHpnZWgwILMalVFmLWFgTCHCZL9263NOcfSo5lBjAzOZAtF5bF++R0Bi+9c9E+p3VEr/xvj4oABtRWVJ2wlWzLbYC2rKFk5iapFhb7uZCUpO4w4Su3a5QFa2vInjYueziRoqySZd/DpstMJ8rsJ94VGizFFFZ1l0sw1ax+wfBAv5+wHs/hlnHi/ea66KBO3rgXKahvV28h+4bh5etc8RCrmiiNbfg6Oj0jQJDjdYIdW8T9YPOI9E1hih8lbfRnMWcOFJgYekfLpoy5LI525UGnlM46J1k6ekLqsn9FqvbiOOoLgqa4YqBm1i9P0ePyjkME+t+RiL8xXX+ItgOYr9G7kM64wlTJPCW8B/crmUdmGzQNC/hD/u/8wfHBS2f8u6OtQMG/+Kpk1oju8lcUZGI/4S8A6/OuktvQr2zgnbs2aADMrM37Oait/pJ3G73S7NwVT8EaK+X43c0C/fUvW2/bD/rqCNpAh9WQlz4Cj6JHwjbmwuind6aCimF1tHjXuR9FXu+g17sPT4ZkKZ6aeBG+m170XdCGn2hVM0wH1rh3VeCG2u/JFqfuGKGSoqeHeNY/icu9pEhtZDzHd7aPoaMXcWvXC9PjooBf7GM1EPacSdnon1kBobjtKSt1l15DjO5TMrJoX7VO7GotQwo+uI/u5Kop01hBXxyxyggl1/8N0ESohPJoqLDrIwvbGK5kW4B49FVPnx9CMvjZDdSsoxPAh+hx6SPe8Hj0Nx4bRs06cbtOkte/V8QSYIqjiJDleEqPrdiKlvgToZz9L29ZR/3Ln65qU1sq7q9c0SEYxIopV7TdTjFS7y76zDPFZkhzc3DjfLtJo/M1hdtt648APcZdmAIgWH6fh3eJZ0qbiPh8RStYH7I2COmnlMw4+t/B5mlhYVSgwPK2Ir736Mh+P9Bw0fF8r9Ghhs4AJzpU0RiK9d1tCsrLfK/hSRwTXhtsSB6eDWEGkO7oeEIz43mgn0sv3SrA9JNHzYkg=";
key = "2e35f242a46d67eeb74aabc37d5e5d05";
CryptoJS.AES.decrypt(atob(data).substring(16), key, {
iv: atob(cipher).substring(0, 16),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
Run Code Online (Sandbox Code Playgroud)
CryptoJS是否以某种不同的方式期望数据,密钥和初始化向量?据我所知,IV是数据中的前16个字节.
我在nodejs中有一个非常小的代码,我签署一个字符串,然后尝试使用节点加密和使用openssl生成的密钥对来验证它.无论我尝试什么,结果总是"假",签名无法验证.
生成公钥/私钥对:
openssl genrsa -out rsa_1024_priv.pem 1024
openssl rsa -in rsa_1024_priv.pem -out rsa_1024_pub.pem -outform PEM -pubout
Run Code Online (Sandbox Code Playgroud)
由此产生的关键是(我不在乎他们公开BTW):
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDCtTEic76GBqUetJ1XXrrWZcxd8vJr2raWRqBjbGpSzLqa3YLv
VxVeK49iSlI+5uLX/2WFJdhKAWoqO+03oH4TDSupolzZrwMFSylxGwR5jPmoNHDM
S3nnzUkBtdr3NCfq1C34fQV0iUGdlPtJaiiTBQPMt4KUcQ1TaazB8TzhqwIDAQAB
AoGAM8WeBP0lwdluelWoKJ0lrPBwgOKilw8W0aqB5y3ir5WEYL1ZnW5YXivS+l2s
tNELrEdapSbE9hieNBCvKMViABQXj4DRw5Dgpfz6Hc8XIzoEl68DtxL313EyouZD
jOiOGWW5UTBatLh05Fa5rh0FbZn8GsHrA6nhz4Fg2zGzpyECQQDi8rN6qhjEk5If
+fOBT+kjHZ/SLrH6OIeAJ+RYstjOfS0bWiM9Wvrhtr7DZkIUA5JNsmeANUGlCrQ2
cBJU2cJJAkEA26HyehCmnCkCjit7s8g3MdT0ys5WvrAFO6z3+kCbCAsGS+34EgnF
yz8dDdfUYP410R5+9Cs/RkYesqindsvEUwJBALCmQVXFeKnqQ99n60ZIMSwILxKn
Dhm6Tp5Obssryt5PSQD1VGC5pHZ0jGAEBIMXlJWtvCprScFxZ3zIFzy8kyECQQDB
lUhHVo3DblIWRTVPDNW5Ul5AswW6JSM3qgkXxgHfYPg3zJOuMnbn4cUWAnnq06VT
oHF9fPDUW9GK3yRbjNaJAkAB2Al6yY0KUhYLtWoEpQ40HlATbhNel2cn5WNs6Y5F
2hedvWdhS/zLzbtbSlOegp00d2/7IBghAfjAc3DE9DZw
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCtTEic76GBqUetJ1XXrrWZcxd
8vJr2raWRqBjbGpSzLqa3YLvVxVeK49iSlI+5uLX/2WFJdhKAWoqO+03oH4TDSup
olzZrwMFSylxGwR5jPmoNHDMS3nnzUkBtdr3NCfq1C34fQV0iUGdlPtJaiiTBQPM
t4KUcQ1TaazB8TzhqwIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
然后,这是我的节点代码:
var crypto = require('crypto');
var privateKey = '-----BEGIN RSA PRIVATE KEY-----\n'+
'MIICXQIBAAKBgQDCtTEic76GBqUetJ1XXrrWZcxd8vJr2raWRqBjbGpSzLqa3YLv\n'+
'VxVeK49iSlI+5uLX/2WFJdhKAWoqO+03oH4TDSupolzZrwMFSylxGwR5jPmoNHDM\n'+
'S3nnzUkBtdr3NCfq1C34fQV0iUGdlPtJaiiTBQPMt4KUcQ1TaazB8TzhqwIDAQAB\n'+
'AoGAM8WeBP0lwdluelWoKJ0lrPBwgOKilw8W0aqB5y3ir5WEYL1ZnW5YXivS+l2s\n'+
'tNELrEdapSbE9hieNBCvKMViABQXj4DRw5Dgpfz6Hc8XIzoEl68DtxL313EyouZD\n'+
'jOiOGWW5UTBatLh05Fa5rh0FbZn8GsHrA6nhz4Fg2zGzpyECQQDi8rN6qhjEk5If\n'+
'+fOBT+kjHZ/SLrH6OIeAJ+RYstjOfS0bWiM9Wvrhtr7DZkIUA5JNsmeANUGlCrQ2\n'+
'cBJU2cJJAkEA26HyehCmnCkCjit7s8g3MdT0ys5WvrAFO6z3+kCbCAsGS+34EgnF\n'+
'yz8dDdfUYP410R5+9Cs/RkYesqindsvEUwJBALCmQVXFeKnqQ99n60ZIMSwILxKn\n'+
'Dhm6Tp5Obssryt5PSQD1VGC5pHZ0jGAEBIMXlJWtvCprScFxZ3zIFzy8kyECQQDB\n'+
'lUhHVo3DblIWRTVPDNW5Ul5AswW6JSM3qgkXxgHfYPg3zJOuMnbn4cUWAnnq06VT\n'+
'oHF9fPDUW9GK3yRbjNaJAkAB2Al6yY0KUhYLtWoEpQ40HlATbhNel2cn5WNs6Y5F\n'+
'2hedvWdhS/zLzbtbSlOegp00d2/7IBghAfjAc3DE9DZw\n'+
'-----END RSA PRIVATE KEY-----';
var publicKey = …Run Code Online (Sandbox Code Playgroud) 我使用Crypto-Js托管的在线版本google codes见下文:
<script src="https://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/hmac-sha256.js"></script>
<script src="https://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/enc-base64-min.js"></script>
Run Code Online (Sandbox Code Playgroud)
然后昨天我的网站突然崩溃,我发现主机不再存在了.我是唯一使用此链接的人吗?他们是否将其移至另一个链接?
Nodejs 加密模块中的最短字符串哈希算法是什么?有没有类似于 crc32 的东西,它产生 8 个字符的 string ,但不幸的是加密本身不支持(我知道有外部模块,但我仅限于内置加密)。哈希冲突概率对于我的应用程序(缓存突发)并不重要。
当我不使用Angular 4时,我只会script为库添加标签.即使我将script标签放在index.html文件中也无法识别CryptoJS.有没有办法使用库或Angular等价物?
我的 Git 目录中有两个并行运行的节点项目。
相同版本的节点 14.5,根中相同的 pem 密钥,一切都相同。然而,一个节点进程能够签署我的 base64 pem 密钥,而另一个节点进程则不能。我可以删除 base64 设置,但仍然有一个进程处理符号,而另一个则不处理。
我从 sign.sign() 方法收到此错误消息。
错误:25066067:DSO 支持例程:dlfcn_load:无法加载共享库
代码如下:
const crypto = require('crypto');
var policy = {
Statement: [
{
Resource: 'https://dev.geolytix.io/mapp/workspace.json',
Condition: { DateLessThan: { 'AWS:EpochTime': Date.now() + 60 * 60 * 1000 } },
},
],
};
var sign = crypto.createSign('RSA-SHA1');
sign.write(JSON.stringify(policy));
var pem = String(readFileSync(join(__dirname, `./mykey.pem`)))
let signature = sign.sign(pem, 'base64')
Run Code Online (Sandbox Code Playgroud)
我注意到将操作系统更新到 Ubuntu 22.04 后出现了问题。
我已清除 openssl(版本 3)并从源代码手动安装 openssl 1.1.1o。https://fedingo.com/how-to-install-openssl-in-ubuntu/ 不幸的是,这将删除其他需要较新版本 OpenSSL 的应用程序,例如 Chrome。
我现在可以手动构建和安装 openssl 3.0.3。加密模块仍然失败。
我尝试通过 cryptojs 库加密用户数据并通过 ajax 发送到服务器,但控制台显示错误:
拒绝加载脚本“ https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js ”,因为它违反了以下内容安全策略指令:“script-src 'self' https://apis.google.com 'unsafe-eval'”。请注意,“script-src-elem”未明确设置,因此“script-src”用作后备。
我的清单代码包含:
"content_security_policy": "script-src 'self' https://apis.google.com 'unsafe-eval'; object-src 'self'"
如何解决这个问题呢?
javascript google-chrome google-chrome-extension cryptojs content-security-policy
我需要用Bower 管理CryptoJS.此项目托管在code.google.com上.可以下载为zip文件或通过SVN下载.
Bower可以下载解压缩zip文件或从SVN下载所有组件并将它们放在crypto文件夹中吗?
.bowerrc 文件,定义下载文件夹:
{
"directory": "app/vendor"
}
Run Code Online (Sandbox Code Playgroud)
我试过这个component.json文件(失败,下载页面本身):
{
"name": "Backbone Client",
"version": "1.0.0",
"dependencies": {
"crypto": "http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/"
}
}
Run Code Online (Sandbox Code Playgroud)
另一个尝试(hmac.js覆盖core.js和它保存为index.js):
{
"name": "Backbone Client",
"version": "1.0.0",
"dependencies": {
"crypto":
"http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/core.js",
"crypto":
"http://crypto-js.googlecode.com/svn/tags/3.1.2/build/components/hmac.js"
}
}
Run Code Online (Sandbox Code Playgroud) 我只是问这个,因为我已经阅读了很多关于加密AES加密的帖子2天了,就在我以为我得到它的时候,我意识到我根本没有得到它.
这篇文章是我最接近我的问题,我有完全相同的问题,但没有答案:
我尝试过很多方面,但我没有做对.
首先
我正在获取已经加密的字符串(我只获得了代码以了解它们是如何进行的),因此修改加密方式不是一种选择.这就是为什么所有类似的问题对我都没有用.
第二
我有权访问密钥,我可以修改它(所以如果需要,调整长度是一个选项).
加密在CryptoJS上完成,它们将加密的字符串作为GET参数发送.
GetParamsForAppUrl.prototype.generateUrlParams = function() {
const self = this;
return new Promise((resolve, reject) => {
const currentDateInMilliseconds = new Date().getTime();
const secret = tokenSecret.secret;
var encrypted = CryptoJS.AES.encrypt(self.authorization, secret);
encrypted = encrypted.toString();
self.urlParams = {
token: encrypted,
time: currentDateInMilliseconds
};
resolve();
});
};
Run Code Online (Sandbox Code Playgroud)
我可以使用CryptoJS在javascript上轻松解密这个:
var decrypted = CryptoJS.AES.decrypt(encrypted_string, secret);
console.log(decrypted.toString(CryptoJS.enc.Utf8));
Run Code Online (Sandbox Code Playgroud)
但出于安全考虑,我不想在Javascript上这样做,所以我试图在Java上解密它:
String secret = "secret";
byte[] cipherText = encrypted_string.getBytes("UTF8");
SecretKey secKey = new SecretKeySpec(secret.getBytes(), "AES");
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.DECRYPT_MODE, …Run Code Online (Sandbox Code Playgroud) cryptojs ×10
javascript ×6
node.js ×3
encryption ×2
openssl ×2
aes ×1
angular ×1
base64 ×1
bower ×1
cryptography ×1
dependencies ×1
google-code ×1
java ×1
pem ×1
php ×1
ruby ×1