如果我有密钥和放大器,如何找到XOR哈希的答案一个号码

时间:2015-11-29 03:39:33

标签: c++11 hash encryption-symmetric

我有一个构成累积XOR哈希的小例程。它好像是一个储蓄账户,每天都会累积得更大......但从这个意义上来说,我们说的是答案是累积生成的,钥匙始终存在。

我采取了一串字符

伪代码:

char H[10] = { "ABCDEFGHI", "\0" };

我使用9个32位数字键在XOR加密中对它们进行哈希处理。

我是这样做的:

for (i;i<10;i++)
    bitset<32> K ^= H[i] ^ NUMKEY[i];

现在如果没有我做的微积分绘图(这看我在那里做了什么?)这就使它变得不透明了。所以K是微积分的积累,根据微积分可以完全预测。

据我所知,撤消它,我做

for (i;i<10;i++) {
    X=0;
    X ^= K ^ NUMKEY[i];
}

是否涉及其他数学?我想我必须接受X并做一点K - X来找到真正的衍生物。

这是我现在的惯例。但我没有得到我正在寻找的东西。

for_each (std::istreambuf_iterator<char>(in), \
    std::istreambuf_iterator<char>(), \
    [&] (long x) {
    t=s_nop(t,0);
    cred.push_back(t);
    alpha = static_cast<long>(cred[size]);
    delta = static_cast<long>(x);
    lambda ^= (alpha ^ delta);
    size++;
});

for (;i<bn;i++) {
    alpha =  static_cast<unsigned long>(cred[bn-1-i]);
    int m = lambda.to_ulong(), n = alpha.to_ulong();

    long hash1 = abs((m-n-1)%256-1);
    delta = static_cast<unsigned long>(hash1);
    btrace.push_back(hash1);
    cout << hash1 << " ";
}

请安全圣诞快乐。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你真正想要的是一次性垫。 (该片段是javascript,就像在那个方向上移动的伪代码一样)

//ignore these top 3 functions (they're just for printing output)
function appendLine(text, target, space, color) {
  var line = document.createElement("div");
  line.style.border = "1px solid " + color;
  line.style.padding = line.style.margin = space;
  line.style["font-family"] = "monospace";
  line.appendChild(document.createTextNode(text));
  target.appendChild(line);
  return line;
}
function makeSection(title) {
  var d = appendLine(title, document.body, "5px", "#dddddd");
  var results = document.createElement("div");
  d.appendChild(results);
  return function(result) {
    appendLine(result, results, "2px", "#eeeeee");
  };
}
function toHex(arr) {
  return arr.map(function(n){
    var h = (n >>> 0).toString(16).toUpperCase();
    while(h.length < 8) h = "0" + h;
    return h;
  }).join(",");
}

//your message
var H = "ABCDEFGHI".split("").map(function(c){return c.charCodeAt(0)});
//your secret encoding key
var NUMKEY = Array.apply(null, Array(9)).map(function(){return Math.random() * Math.pow(2, 32)});

//what you're doing
(function() {
  var section = makeSection("what you're doing:");
  section("ABCDEFGHI as array of 32bit numbers: " + toHex(H));
  section("NUMKEY: " + toHex(NUMKEY));
  var K = 0;
  for (var i = 0; i < 10; i++) {
    K ^= H[i] ^ NUMKEY[i];
  }
  section("K: " + toHex([K]));
  var X = 0;
  for (var i = 0; i < 10; i++) {
    X ^= K ^ NUMKEY[i];
  }
  section("X: " + toHex([X]));
})();

//what you're trying to do
(function() {
  var section = makeSection("what you're trying to do:");
  section("ABCDEFGHI as array of 32bit numbers: " + toHex(H));
  section("NUMKEY: " + toHex(NUMKEY));
  var Hs_XORd = 0;
  for (var i = 0; i < 10; i++) {
    Hs_XORd ^= H[i];
  }
  section("H's XOR'd together: " + toHex([Hs_XORd]));
  var NUMKEYs_XORd = 0;
  for (var i = 0; i < H.length; i++) {
    NUMKEYs_XORd ^= NUMKEY[i];
  }
  section("NUMKEY's XOR'd together: " + toHex([NUMKEYs_XORd]));
  var K = NUMKEYs_XORd ^ Hs_XORd;
  section("K: " + toHex([K]));
  var X = K ^ NUMKEYs_XORd;
  section("X (should be the same as H's XOR'd together): " + toHex([X]));
})();


//what I think you mean to be doing (one time pad)
(function() {
  var section = makeSection("what I think you mean to be doing (one time pad):");
  section("ABCDEFGHI as array of 32bit numbers: " + toHex(H));
  section("NUMKEY: " + toHex(NUMKEY));
  var K = [];
  for (var i = 0; i < H.length; i++) {
    K[i] = H[i] ^ NUMKEY[i];
  }
  section("K (encoded message using NUMKEY as one time pad): " + toHex(K));
  var X = [];
  for (var i = 0; i < K.length; i++) {
    X[i] = K[i] ^ NUMKEY[i];
  }
  section("X (decoded message, should be the same as ABCDEFGHI): " + toHex(X));
})();