小编Ric*_*ich的帖子

密码盐如何帮助抵御彩虹表攻击?

我在理解盐密封的目的时遇到了一些麻烦.据我所知,主要用途是阻碍彩虹表攻击.但是,我看到实现这一点的方法似乎并没有真正解决问题.

我见过许多教程,建议将盐用作以下内容:

$hash =  md5($salt.$password)
Run Code Online (Sandbox Code Playgroud)

原因是哈希现在不映射到原始密码,而是密码和盐的组合.但是说$salt=foo$password=bar$hash=3858f62230ac3c915f300c664312c63f.现在有人用彩虹表可以反转哈希并提出输入"foobar".然后他们可以尝试所有密码组合(f,fo,foo,... oobar,obar,bar,ar,ar).获取密码可能需要几毫秒,但其他情况并不多.

我见过的其他用途是在我的linux系统上.在/ etc/shadow中,散列密码实际上 salt一起存储.例如,"foo"的盐和"bar"的密码将散列到此:$1$foo$te5SBM.7C25fFDu6bIRbX1.如果一个黑客以某种方式能够得到这个文件,我不知道盐服务的目的是什么,因为te5SBM.7C25fFDu6bIRbX已知反向哈希包含"foo".

感谢任何人都可以解决这个问题.

编辑:谢谢你的帮助.为了总结我的理解,salt使得散列密码更加复杂,从而使得它更不可能存在于预先计算的彩虹表中.我之前误解的是,我假设所有哈希都存在彩虹表.

hash cryptography salt rainbowtable

217
推荐指数
7
解决办法
6万
查看次数

Numpy:x和y数组的笛卡尔积指向单个2D点阵列

我有两个numpy数组,定义网格的x和y轴.例如:

x = numpy.array([1,2,3])
y = numpy.array([4,5])
Run Code Online (Sandbox Code Playgroud)

我想生成这些数组的笛卡尔积来生成:

array([[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]])
Run Code Online (Sandbox Code Playgroud)

在某种程度上,由于我需要在循环中多次执行此操作,因此效率不高.我假设将它们转换为Python列表并使用itertools.product并返回到numpy数组并不是最有效的形式.

python numpy cartesian-product

134
推荐指数
8
解决办法
5万
查看次数

如何在numpy中将布尔数组转换为索引数组

是否有一个有效的Numpy机制来检索基于条件为true的数组中位置的整数索引,而不是布尔掩码数组?

例如:

x=np.array([range(100,1,-1)])
#generate a mask to find all values that are a power of 2
mask=x&(x-1)==0
#This will tell me those values
print x[mask]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想知道指标imask地方mask[i]==True.是否有可能在没有循环的情况下生成这些?

python arrays numpy

63
推荐指数
2
解决办法
5万
查看次数

在恒定时间内查找排序列表中的数字是否存在?(面试问题)

我正在为即将到来的面试而学习,并且多次遇到过这个问题(逐字逐句)

在N个数字的排序列表中查找或确定数字不存在,其中数字的范围超过M,M >> N和N足够大以跨越多个磁盘.击败O(log n)的算法; 恒定时间算法的奖励积分.

首先,我不确定这是否是一个真正解决方案的问题.我和我的同事已经对这个问题进行了数周的思考,似乎形成了不良(当然,只是因为我们无法想到解决方案并不意味着没有解决方案).我问过面试官的一些问题是:

  • 排序列表中是否有重复?
  • 与磁盘数量和N的关系是什么?

我考虑的一种方法是二进制搜索每个磁盘的最小值/最大值,以确定应该保存该号码的磁盘(如果存在),然后在磁盘本身上进行二进制搜索.当然,如果磁盘数量很大并且您还有一个已排序的磁盘列表,这只是一个数量级的加速.我认为这会产生某种O(log log n)时间.

至于M >> N提示,也许如果你知道磁盘上有多少个数字以及范围是什么,你可以使用鸽子原则在某些时候排除某些情况,但我无法弄清楚数量级的改进.

此外,"恒定时间算法的奖励积分"让我有点怀疑.

有关此问题的任何想法,解决方案或相关历史记录?

algorithm

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

如何构建Python C扩展,以便我可以从模块中导入它

我有一个包含许多子模块的Python项目,我用distutils打包.我想在C中构建一些Python扩展以存在于其中一些子模块中,但我不明白如何使Python扩展存在于子模块中.以下是我正在寻找的最简单的例子:

这是我的Python扩展c_extension.c:

#include <Python.h>

static PyObject *
get_answer(PyObject *self, PyObject *args)
{
    return Py_BuildValue("i", 42);
}

static PyMethodDef Methods[] = {
    {"get_answer",  get_answer, METH_VARARGS, "The meaning of life."},
    {NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC
initc_extension(void) {
  (void) Py_InitModule("c_extension", Methods);
}
Run Code Online (Sandbox Code Playgroud)

以下setup.py是有效的:

from distutils.core import setup
from distutils.extension import Extension

setup(name='c_extension_demo',
      ext_modules = [Extension('c_extension', sources = ['c_extension.c'])])
Run Code Online (Sandbox Code Playgroud)

在virtualenv中安装后我可以这样做:

>>> import c_extension
>>> c_extension.get_answer()
42
Run Code Online (Sandbox Code Playgroud)

但是,我想c_extension生活在一个子模块中foo.bar.我需要在此管道中进行哪些更改才能使Python shell中的行为如下所示:

>>> import foo.bar.c_extension
>>> foo.bar.c_extension.get_answer()
42
Run Code Online (Sandbox Code Playgroud)

python distutils python-extensions

19
推荐指数
1
解决办法
6236
查看次数

Java中的多节点并发

我编写了一个多线程Java程序来解决一个令人尴尬的并行问题,它利用了多核CPU上的所有空闲CPU周期.我想重构我的解决方案,以便它可以在多个节点上运行,同时仍然保留我已编写的大部分代码.

我过去曾使用过MP的MPI,并且被告知这是解决CPU周期最大化问题的"正确"方法,但我也知道Java中的其他并发框架,如RMI,并想知道它们是否同样如此好.

有没有一种很好的方法来处理Java中的多节点和多核并发,其主要目标是尽可能地利用群集中最多的CPU周期?

编辑:我得到的印象是没有简单的方法来处理这些东西.我并不感到惊讶,但我希望.:)

java parallel-processing concurrency

18
推荐指数
3
解决办法
1795
查看次数

我可以使用Cython创建静态C数组吗?

我想在Cython中做到这一点:

cdef int shiftIndexes[] = [1,-1, 0, 2,-1, -1, 4, 0, -1, 8, 1, -1, 16, 1, 0, 32, 1, 1, 64, 0, 1, 128, -1, 1]
Run Code Online (Sandbox Code Playgroud)

我已经在固定的bug报告和旧的电子邮件列表中看到一些参考,Cython中存在静态数组功能,但是我找不到anty示例,这个特定的例子给我一个语法错误: Syntax error in C variable declaration

是否可以使用Cython制作静态C数组?

python arrays cython

15
推荐指数
1
解决办法
4049
查看次数

如何在Cython中传递指向ac函数的指针?

我正在尝试qsort使用自定义比较函数调用Cython,但我不明白如何传递函数引用.首先,我有一个结构:

cdef struct Pair:
    int i,j
    float h
Run Code Online (Sandbox Code Playgroud)

比较功能按以下方式排序h:

cdef int compare(const_void *a, const_void *b):
    cdef float v = ((<Pair*>a)).h-((<Pair*>b)).h
    if v < 0: return -1
    if v > 0: return 1
    return 0
Run Code Online (Sandbox Code Playgroud)

这是我遇到麻烦的部分:

    cdef Pair[5] pa
    for i in range(5):
        pa[i].i = i;
        pa[i].j = i*2;
        pa[i].h = i*.5;
    qsort(pa,5,sizeof(Pair),compare)
Run Code Online (Sandbox Code Playgroud)

最后一行不会编译并生成此错误,我认为这与我无法弄清楚如何compare作为参考传递的事实有关qsort:

Cannot assign type 'int (const_void *, const_void *)' to 'int (*)(const_void *, const_void *) nogil'
Run Code Online (Sandbox Code Playgroud)

cython

13
推荐指数
1
解决办法
5366
查看次数

linting Cython代码的选项

我有一个Cython模块,我想lint PEP8样式,但pylintCython cdef语法的语法错误.有没有人建议如何维护Cython代码的Python编码标准?

python pylint cython

13
推荐指数
2
解决办法
1229
查看次数

如何确保我只有一个通过Apache运行的PHP脚本实例?

我有一个index.php脚本,我在Google Code网站上用作提交后的URL.此脚本克隆目录并构建可能需要一些工作的项目.我想避免让这个脚本并行运行多次.

是否有一种机制可以用来避免执行该脚本,如果另一个已经在会话中?

php apache

10
推荐指数
1
解决办法
6737
查看次数