小编nem*_*ems的帖子

如何安全地为AES CBC加密生成IV?

我正在研究一些加密的东西.

  • 我使用AES 256和CBC模式
  • 我用OPENSSL

我知道以下事情(来源=维基百科):

初始化矢量应该是:

  • 唯一:对于使用给定密钥加密的任何消息,不得重复
  • 不可预测:观察任意数量的消息及其IV的攻击者应该没有信息来预测下一个消息,其成功概率大于每比特50%(即无法区分随机)

我的问题是,如何使用OPENSSL和PHP安全地生成IV?我知道lib mcrypt中存在这样的功能(http://fr2.php.net/manual/fr/function.mcrypt-create-iv.php)

我没有找到任何与OPENSSL这样做的东西(产生独特且不可预测的IV).

php openssl cryptography vector

11
推荐指数
1
解决办法
2万
查看次数

如何安全地覆盖php内存?

我实际上正在开发一个安全脚本,似乎我遇到了PHP的问题以及PHP使用内存的方式.

my.php:

<?php
// Display current PID
echo 'pid= ', posix_getpid(), PHP_EOL;

// The user type a very secret key
echo 'Fill secret: ';
$my_secret_key = trim(fgets(STDIN));

// 'Destroty' the secret key
unset($my_secret_key);

// Wait for something
echo 'waiting...';
sleep(60);
Run Code Online (Sandbox Code Playgroud)

现在我运行脚本:

php my.php
pid= 1402
Fill secret: AZERTY             <= User input
waiting...
Run Code Online (Sandbox Code Playgroud)

在脚本结束之前(睡觉时),我生成一个向脚本发送SIGSEV信号的核心文件

kill -11 1402
Run Code Online (Sandbox Code Playgroud)

我检查核心文件:

 strings core | less
Run Code Online (Sandbox Code Playgroud)

以下是结果的摘录:

...
fjssdd
sleep    
STDIN
AZERTY            <==== this is the secret key
zergdf
...
Run Code Online (Sandbox Code Playgroud)

我知道内存只是在未设置且未被"销毁"的情况下发布.数据并没有真正删除(调用free()函数)

因此,如果有人转储进程的内存,即使在脚本执行之后,他也可以读取$ my_secret_key(直到内存空间被另一个进程覆盖)

有没有办法在PHP脚本执行后覆盖整个内存空间的这个内存段?


感谢大家的评论. …

php memory security

9
推荐指数
1
解决办法
1007
查看次数

使用DATE字段作为MySQL日期维度的主键

我想在MySQL数据仓库中处理日期维度.(我是DW世界的新手)

我在google上进行了一些搜索,看到了很多表结构(大部分)日期维度,其中主键很简单UNSIGNED INTEGER.

为什么不使用DATE字段作为主键,因为使用MySQL它是3字节VS 4字节INTEGER

例如:

CREATE TABLE dimDate
id INTEGER UNSIGNED NOT NULL PRIMARY AUTOI_NCREMENT,
date DATE NOT NULL,
dayOfWeek
...
Run Code Online (Sandbox Code Playgroud)

VS

CREATE TABLE dimDate
date DATE NOT NULL PRIMARY,
dayOfWeek
...
Run Code Online (Sandbox Code Playgroud)

mysql schema date data-warehouse dimension

9
推荐指数
2
解决办法
1万
查看次数

使用 jekyll /liquid 如何获取 yml 哈希的所有键

我有这个 yaml

param1:
  key1: value1
  key2: value2

param2:
  key1: value1
  key2: value2

param3:
  key1: value1
  key2: value2
Run Code Online (Sandbox Code Playgroud)

我怎样才能用液体得到所有的钥匙?

预期的结果是

param1,param2,param3
Run Code Online (Sandbox Code Playgroud)

任何的想法?

  • 非常丑陋的解决方案:{% for %} 在集合上并连接键...
  • 可接受的替代解决方案:创建一个液体过滤器“键”......声音太大以至于它实际上不存在......

collections yaml liquid jekyll

6
推荐指数
1
解决办法
1218
查看次数

如何使用phing命令行参数

phing是否可以根据命令行实现一些任务?

例如:

phing install tag = 1.0 dest =/tmp/1.0

我实际上只看到3种方法

  • phing install -Dtag = 1.0 -Ddest =/tmp/1.0
  • 使用提示(有类似PromptTask的东西)
  • 实现我的任务并玩$ argv(全局)

从命令行调用phing目标时,其他命令行参数是否无用?

phing command-line target

4
推荐指数
1
解决办法
3590
查看次数

erb 如何在数组上循环

我不能简单地使用 ruby​​ erb 模板系统循环数组......

这是我的模板:

<% ['foo', 'bar'].each do |val| -%>
<%= val %>
<% end -%>
Run Code Online (Sandbox Code Playgroud)

这是命令行和结果

erb test.erb
/usr/share/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/erb.rb:896:in `eval': test.erb:1: syntax error, unexpected ';' (SyntaxError)
'foo', 'bar'].each do |val| -; _erbout.concat "\n"
                              ^
test.erb:3: syntax error, unexpected ';'
;  end -; _erbout.concat "\n"
         ^
        from /usr/share/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/erb.rb:896:in `result'
        from /usr/share/rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/erb.rb:878:in `run'
        from /usr/share/rvm/rubies/ruby-2.4.1/bin/erb:149:in `run'
        from /usr/share/rvm/rubies/ruby-2.4.1/bin/erb:170:in `<main>'
Run Code Online (Sandbox Code Playgroud)

这个非常简单的例子有什么问题吗?

免责声明:我是 ruby​​ 和 erb 菜鸟 ^^

ruby parsing loops erb

4
推荐指数
1
解决办法
8771
查看次数