Algorithm 从两个流中找出匹配比特和非匹配比特的算法

Algorithm 从两个流中找出匹配比特和非匹配比特的算法,algorithm,encryption,Algorithm,Encryption,我在Java中添加两位流的对应位,如下所示: 1 0 1 1 0 0 1 0 1 0 1 0 ==================== 2 0 2 1 1 0 在此之后,我添加以下结果: 2+0+2+1+1+0 = 6 现在,我必须找出结果(6)中1ns和2s的数量,即匹配位和非匹配位。我试图设计这样一种算法,它能告诉我结果由1ns和2s组成的确切数字,但到目前为止我还无法创建任何算法。 它允许将每个加法结果乘以一个常量。可以减去单个位以实现上述目标 我也可以像上面加的那样,将这些位相乘。但

我在Java中添加两位流的对应位,如下所示:

1 0 1 1 0 0
1 0 1 0 1 0
====================
2 0 2 1 1 0
在此之后,我添加以下结果:

2+0+2+1+1+0 = 6
现在,我必须找出结果(6)中1ns和2s的数量,即匹配位和非匹配位。我试图设计这样一种算法,它能告诉我结果由1ns和2s组成的确切数字,但到目前为止我还无法创建任何算法。 它允许将每个加法结果乘以一个常量。可以减去单个位以实现上述目标

我也可以像上面加的那样,将这些位相乘。但我无法将这些位添加到结果中。位可以与自身或任何其他位相乘。甚至我也可以用我选择的数字来表示这些位。也就是说,我可以说1=2,0=3,那么我可以得到:

对于加法(帕斯卡佩利尔):

用于乘法(RSA)

唯一的目的是通过加法(Pascal Paillier)或乘法(RSA)从总数中找出相似位(1和1)和非相似位(0和1,1和0)的数量。 此外,第二比特流可以用与上述不同的数字来表示

也可以使用以下方法:

  • 与位和结果相乘,与常数成指数
  • 位与结果之间的加法/减法以及仅使用常数的乘法
  • 进一步详情: 我正在使用Pascal Paillier同态算法来加密这些单独的位。Pascal Paillier只支持加密数据上的加法,所以我只能添加。我必须将这个数字发送给某个应用程序,该应用程序必须找出匹配位和非匹配位的确切数量。
    另外,我可以使用RSA,但它只允许乘法。

    一般来说,从两个原始比特流a和b,您将需要执行以下操作

    popcnt(a XOR b) = # of non-matching bits (pairs of 0,1 and 1,0)
    popcnt(a AND b) = # of matching 1-bits (pairs of 1,1)
    
    其中popcnt是结果字符串的名称

    如果您碰巧在支持SSE4 POPCNT指令的处理器(过去7年中生产的AMD和Intel处理器)上编译它,这可能是解决问题的最有效的方法。例如,这两种方法的实现(一次测试流a和b中整数大小的比特数)

    将生成汇编代码

    ; nonmatch
    xor    %esi, %edi
    popcnt %edi, %eax
    retq
    
    ; match
    and    %esi, %edi
    popcnt %edi, %eax
    retq
    

    分别。

    请澄清此问题与您已经回答的问题有何不同。(加密单个比特的算法很少。)你可以同时使用两种密文吗?@greybeard Sir在上一个中,我只要求添加。现在,我要求根据提供的规则,以任何方式检查类似的位。虽然这并没有什么不同,我已经把这个问题标记为删除。我一次只能使用一个算法。这不是在问题链接的edit six中添加的吗?如果你能清楚地说明不同之处,请在问题中正确地说明——不要评论。如果你想让这个问题包含“乘法”/“RSA”和不链接的问题,考虑回滚这个问题。我如何在加密文本上执行和和XOR操作?显示为0和1的位类似于:14133730307633149684308821149813030703
    popcnt(a XOR b) = # of non-matching bits (pairs of 0,1 and 1,0)
    popcnt(a AND b) = # of matching 1-bits (pairs of 1,1)
    
    int nonmatch(int a, int b) {
        return __builtin_popcount(a ^ b);
    }
    
    int match(int a, int b) {
        return __builtin_popcount(a & b);
    }
    
    ; nonmatch
    xor    %esi, %edi
    popcnt %edi, %eax
    retq
    
    ; match
    and    %esi, %edi
    popcnt %edi, %eax
    retq