在Diffie-Hellman Key Exchange上观看YouTube视频后,我想尝试用JavaScript实现(Atwood定律).
我使用以下规则在Node.js上绘制了一个密码:
第1步:客户端和服务器就共享密钥达成一致:
客户端和服务器以512位主公钥pK开头
客户端生成512位主要私钥kC并发送powMod(3,kC,pK)
服务器生成512位主要私钥kS并发送powMod(3,kS,pK)
客户端和服务器使用powMod(响应,私钥,pK)作为共享密钥
第2步:沟通
在客户端发送数据之前,使用Stanford Javascript加密库(256位AES,HMAC身份验证,PBKDF2密码加密和CCM身份验证加密)使用共享密钥对其进行加密.
一旦服务器使用共享密钥解密数据,它就会生成一个新的512位主要私钥,并将其作为SJCL加密响应发送.
客户端和服务器使用powMod切换到新的共享密钥(3,prevSharedKey,newPrivKey)
现在我有几个问题..
与HTTPS或其他算法相比,这样的系统有多安全?这种系统最薄弱的地方是什么?
在安全性/实用性方面,使用1024位密钥以提高安全性会更好吗?HMAC/PBKDF2/CCM选项是否过度杀伤?是否值得调整共享密钥?谢谢阅读!
在我的配置中,我正在使用:
error_page 404 /switch;
Run Code Online (Sandbox Code Playgroud)
当我浏览/ testABC时,我在日志中看到此错误:
open() "/usr/local/nginx/html/www/testABC" failed (2: No such file or directory)
Run Code Online (Sandbox Code Playgroud)
如何禁用此错误?我目前正在使用404作为网站功能的一部分.
我在ubuntu 13.04上全新安装php5-fpm和nginx时使用此配置:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ /index.html;
}
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
allow ::1;
deny all;
}
error_page 404 /404.html;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我的Web浏览器将php视为文本而不是执行结果.我应该在哪里进行故障排除?
在此文本字段中,您可以在contenteditable字段中键入"k"和"m",它们会正确显示.
keyboardShortcuts: false // Doesn't work
Run Code Online (Sandbox Code Playgroud)
但是,如果你拖动背景,你将失去输入'm'或'k'的能力.如何阻止谷歌地图抓取这些键盘键('k'和'm')?
我可以使用以下方法将字符串的第一个字母大写:
str:gsub("^%l", string.upper)
Run Code Online (Sandbox Code Playgroud)
如何修改它以大写字符串中每个单词的第一个字母?
使用canvas@1.2.3和jsdom@3.1.2与节点v0.12.2,我在尝试使用canvas toDataURL()函数时遇到错误.
canvasTest.js:
$(function(){
var canvas = $('<canvas></canvas>').attr({'id':'canvasTest', 'width':'500', 'height':'500'});
var ctx=canvas[0].getContext("2d");
ctx.beginPath();
ctx.arc(100,75,50,0,2*Math.PI);
ctx.stroke();
$('#canvasWrap').append(canvas);
});
Run Code Online (Sandbox Code Playgroud)
HTML测试:
<!doctype html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="canvasTest.js"></script>
<script type="text/javascript">
$(function(){
console.log($('body').html());
console.log($('#canvasTest').length);
console.log($('#canvasTest')[0].toDataURL());
})
</script>
</head>
<body>
<div id="canvasWrap"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
jsdom测试:
var canvas = require('canvas');
var jsdom = require('jsdom');
jsdom.env({
html: '<html><body><div id="canvasWrap"></div></body></html>',
scripts: ['127.0.0.1/jquery-2.1.4.min.js','127.0.0.1/canvasTest.js'],
done:function (err,win) {
var $ = win.jQuery;
$(function(){
console.log($('body').html());
console.log($('#canvasTest').length);
console.log($('#canvasTest')[0].toDataURL());
});
}
});
Run Code Online (Sandbox Code Playgroud)
在我在Chrome中的HTML测试中,我获得了正确的base64编码的画布数据,而在node.js中,错误如下:
TypeError: Cannot read property 'toDataURL' of undefined
Run Code Online (Sandbox Code Playgroud) 当我使用时,ngx.var.request_uri我将返回一个包含%20的字符串代替空格.是否有urldecode()函数或类似解码我的字符串?
我之前运行的是apache 2.2.20和openssl 1.0.0e.我安装了openssl 1.0.1,然后下载了apache 2.4.1的tarball并安装了apr 1.4.6和apr-util 1.4.1 --prefix=/usr/local.我配置了apache2:
sudo ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all
--enable-deflate --enable-proxy --enable-proxy-balancer --enable-proxy-http
--enable-rewrite --enable-cache --enable-mem-cache --enable-ssl --enable-headers
--with-mpm=worker --with-included-apr
Run Code Online (Sandbox Code Playgroud)
但跑完后sudo make我得到一个错误:
httpd-2.4.1/support/ab.c:2227: undefined reference to `SSLv2_client_method'
Run Code Online (Sandbox Code Playgroud)
导致此错误的原因是什么?如何更正错误?
当我使用以下脚本时:
local smtp = require("socket.smtp")
local from = "from@host"
local rcpt = "rcpt@host"
local msg = {
headers = {
to = rcpt,
subject = "Hi"
},
body = "Hello"
}
smtp.send{from = from,rcpt = rcpt,source = smtp.message(msg)}
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:lua entry thread aborted: runtime error: attempt to yield across C-call boundary.
我正在使用Lua 5.1 的最新luasocket安装,luarocks使用与LuaJIT 2.1编译的nginx.是什么导致此错误消息,我该如何解决?
我有一个 redis util,看起来像:
const redis = require('redis')
const { promisify } = require('util')
const client = redis.createClient({
host: '127.0.0.1',
port: '6379'
})
module.exports = {
get: promisify(client.get).bind(client),
hget: promisify(client.hget).bind(client),
set: promisify(client.set).bind(client),
mset: promisify(client.mset).bind(client),
hset: promisify(client.hset).bind(client),
hmset: promisify(client.hmset).bind(client),
...
}
Run Code Online (Sandbox Code Playgroud)
我想在没有所有重复的情况下重写它。我将如何通过promisify迭代每个方法导出客户端函数?
最初,我研究Object.keys(client)并Object.getOwnPropertyNames(client)作为获取要映射的方法名称的起点,但这些数组都不包含它们。
编辑:这更接近,有没有更好的表达方式?
const promisifiedClient = {}
for (const fn in Object.getPrototypeOf(client)) {
if (typeof client[fn] === 'function') {
promisifiedClient[fn] = promisify(client[fn]).bind(client)
}
}
module.exports = promisifiedClient
Run Code Online (Sandbox Code Playgroud)
Edit2:也许这有效(如果它不是没有一些奇怪的promisifying函数的副作用,我可能不需要/想要promisify?)
const redisFunctionList = Object.keys(Object.getPrototypeOf(client))
const promisifiedRedis = …Run Code Online (Sandbox Code Playgroud) nginx ×4
lua ×3
javascript ×2
node.js ×2
aes ×1
apache ×1
apache2 ×1
canvas ×1
ecmascript-6 ×1
encryption ×1
fastcgi ×1
google-maps ×1
jsdom ×1
lua-patterns ×1
luajit ×1
luarocks ×1
luasocket ×1
makefile ×1
openssl ×1