我在理解盐密封的目的时遇到了一些麻烦.据我所知,主要用途是阻碍彩虹表攻击.但是,我看到实现这一点的方法似乎并没有真正解决问题.
我见过许多教程,建议将盐用作以下内容:
$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使得散列密码更加复杂,从而使得它更不可能存在于预先计算的彩虹表中.我之前误解的是,我假设所有哈希都存在彩虹表.
我有两个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数组并不是最有效的形式.
是否有一个有效的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)
在这种情况下,我想知道指标i的mask地方mask[i]==True.是否有可能在没有循环的情况下生成这些?
我正在为即将到来的面试而学习,并且多次遇到过这个问题(逐字逐句)
在N个数字的排序列表中查找或确定数字不存在,其中数字的范围超过M,M >> N和N足够大以跨越多个磁盘.击败O(log n)的算法; 恒定时间算法的奖励积分.
首先,我不确定这是否是一个真正解决方案的问题.我和我的同事已经对这个问题进行了数周的思考,似乎形成了不良(当然,只是因为我们无法想到解决方案并不意味着没有解决方案).我问过面试官的一些问题是:
我考虑的一种方法是二进制搜索每个磁盘的最小值/最大值,以确定应该保存该号码的磁盘(如果存在),然后在磁盘本身上进行二进制搜索.当然,如果磁盘数量很大并且您还有一个已排序的磁盘列表,这只是一个数量级的加速.我认为这会产生某种O(log log n)时间.
至于M >> N提示,也许如果你知道磁盘上有多少个数字以及范围是什么,你可以使用鸽子原则在某些时候排除某些情况,但我无法弄清楚数量级的改进.
此外,"恒定时间算法的奖励积分"让我有点怀疑.
有关此问题的任何想法,解决方案或相关历史记录?
我有一个包含许多子模块的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) 我编写了一个多线程Java程序来解决一个令人尴尬的并行问题,它利用了多核CPU上的所有空闲CPU周期.我想重构我的解决方案,以便它可以在多个节点上运行,同时仍然保留我已编写的大部分代码.
我过去曾使用过MP的MPI,并且被告知这是解决CPU周期最大化问题的"正确"方法,但我也知道Java中的其他并发框架,如RMI,并想知道它们是否同样如此好.
有没有一种很好的方法来处理Java中的多节点和多核并发,其主要目标是尽可能地利用群集中最多的CPU周期?
编辑:我得到的印象是没有简单的方法来处理这些东西.我并不感到惊讶,但我希望.:)
我想在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数组?
我正在尝试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模块,我想lint PEP8样式,但pylintCython cdef语法的语法错误.有没有人建议如何维护Cython代码的Python编码标准?
我有一个index.php脚本,我在Google Code网站上用作提交后的URL.此脚本克隆目录并构建可能需要一些工作的项目.我想避免让这个脚本并行运行多次.
是否有一种机制可以用来避免执行该脚本,如果另一个已经在会话中?
python ×5
cython ×3
arrays ×2
numpy ×2
algorithm ×1
apache ×1
concurrency ×1
cryptography ×1
distutils ×1
hash ×1
java ×1
php ×1
pylint ×1
rainbowtable ×1
salt ×1