小编amc*_*ley的帖子

使用C#,BouncyCastle和导入的RSA密钥进行RSA签名和验证 - 内部使用Python示例和非工作C#代码示例

我一直在试着用C#和BouncyCastle工作来解决RSA数据签名和验证的一个小例子.

RSACryptoServiceProvider.VerifyHash()总是在一个适用于Python和M2Crypto的示例中返回false.

我已经验证了工作示例和C#示例之间的哈希签名是相同的,它就在那里我被卡住了.我觉得我错过了一些重要的细节.

工作的Python代码和非工作的C#代码如下.

关键是生成的

openssl genrsa -out testkey.pem 1024
openssl rsa -in testkey.pem -pubout > testkey.pub
Run Code Online (Sandbox Code Playgroud)

Python代码(工作):

    private = """-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCxSHbp1ID/XHEdzVzgqYR1F/79PeMbqzuKNZChvt1gFObBhKyB
pgaHDHw3UZrO8s/hBEE/Mpe2Lh90ZAFdPIXq+HyVoznXMoJYBv0uLDApvSQbJNOd
f7T5VwmpBbkfj1NAlm39Eun9uBSokEOnB24g+bczPQPGOASrQ2Ly9afOZQIDAQAB
AoGBAIEzQIZ1OnXgVwfTLMcGg+QaUtkYizUU+9Vj6D4YrZliYjHSkS4DY2p0rOpb
7Ki5yMpCoZJ/OpWo03+tilj6zNUU6X3aHrPPSv8jcsE0sDi9zYJr/Ztk3EG23sad
bM28Bb4fV/Z0/E6FZJrmuvI2dZP/57oQSHGOhtkHFO21cW5BAkEA3l/i5Rc34YXc
WHYEsOYe0kAxS4dCmhbLWaWvsghW/TomjdxzePsO70GZZqRMdzkfA1iS1OrK+pP4
4suL2rSLrQJBAMwXFnBp4Jmek0CTSxoYf6q91eFm/IRkGLnzE1fEZ76vQOBTas8T
/mpjNQHSEywo/QB62h9A8hy7XNrfZJAMJJkCQA5TYwybKFBxDTbts3Op/4ZP+F0D
Q7klisglsmHnw6Lgoic1coLyuY2UTkucfgiYN3VBuYPZ9GWcLsZ9km7ufqkCQQCz
NVa70Qyqd+cfXfcla/u2pskHCtKTQf3AUmRavhjHBMa39CemvAy7yG9EMP4q2bcH
U9jydqnidtdbTavVHQSJAkA0zJtLzHGPtQqQaI7K6kBDXYPqloGnQxHxad0HPx2e
Vj2qv1tEsqeG6HC7aL/afXOtxcfjq4oMHbGUjDv+dGfP
-----END RSA PRIVATE KEY-----"""

public = """-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxSHbp1ID/XHEdzVzgqYR1F/79
PeMbqzuKNZChvt1gFObBhKyBpgaHDHw3UZrO8s/hBEE/Mpe2Lh90ZAFdPIXq+HyV
oznXMoJYBv0uLDApvSQbJNOdf7T5VwmpBbkfj1NAlm39Eun9uBSokEOnB24g+bcz
PQPGOASrQ2Ly9afOZQIDAQAB
-----END PUBLIC KEY-----"""

message = "test input string"

import base64

# Use EVP api to sign message
from M2Crypto import EVP
key = EVP.load_key_string(private)
key.reset_context(md='sha1')
key.sign_init()
key.sign_update(message)
signature = key.sign_final() …
Run Code Online (Sandbox Code Playgroud)

c# python rsa bouncycastle

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

g ++ - 4.8中缺少AVX日志内在函数(_mm256_log_ps)?

我试图在我的代码中使用一些AVX内在函数,并遇到了对数内在函数的砖墙.

使用适用于Linux的英特尔intrinsics指南v3.0.1,我看到内在_mm256_log_ps(__m256)列为"immintrin.h"的一部分,并且在我当前的arch上也受支持.

但是,尝试编译这个简单的测试用例失败,并显示"错误:'_ mm256_log_ps'未在此范围内声明"

这个例子是用编译的 g++-4.8 -march=native -mavx test.cpp

#include <immintrin.h>
int main()
{
        __m256 i;
        _mm256_log_ps(i);
}
Run Code Online (Sandbox Code Playgroud)

我错过了一些基本的东西吗?某些内在函数是否不受g ++支持且仅在icc中可用?

已解决:此指令不是真正的内在指令,而是作为ICC的英特尔SVML的一部分实现的.

c++ g++ intrinsics avx

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

SQLAlchemy关联多列的更新

我已经能够使用此处文档中显示的相关更新构造来更新表中的一列.

例如:

sel = select([UpdateTable.column]).\
      where(UpdateTable.id == OrigTable.id)

up = update(OrigTable).values(column=sel) 
Run Code Online (Sandbox Code Playgroud)

哪个产生SQL如:

UPDATE origtable SET column=(SELECT updatetable.column
FROM updatetable
WHERE updatetable.id = origtable.id)
Run Code Online (Sandbox Code Playgroud)

是否可以使用Declaritive或Query Api更新选择的多个列?

我试图在PostgreSQL中模拟类似下面的内容:

UPDATE origtable
   SET
     column1 = updatetable.column1,
     column2 = updatetable.column2
   FROM updatetable 
   WHERE origtable.id == updatetable.id
Run Code Online (Sandbox Code Playgroud)

编辑:

似乎使用当前的SQLAlchemy api可能无法将此单个语句格式化.

但是,使用此处的解决方案似乎可以使用两个选择.

python postgresql sqlalchemy

8
推荐指数
1
解决办法
582
查看次数

从 SQLAlchemy 模型创建一个具有不同名称的表?

我正在将 csv 文件中的数据导入到使用 SQLAlchemy 声明性 api 创建的表中。

我收到了这些数据的更新,我想将其暂存在具有相同结构的临时表中进行预处理。

例如:

from sqlalchemy import Column,Integer
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class MyModel(Base):
    __tablename__ = "mymodel"
    test_column = Column(Integer,primary_key=True)
Run Code Online (Sandbox Code Playgroud)

我可以用来MyModel.__table__.create()创建这个表。

我可以使用类似的构造来创建另一个具有相同模型和不同名称的表吗?

实现这一目标的推荐方法是什么?

python sqlalchemy

5
推荐指数
1
解决办法
3588
查看次数

为什么g ++(4.6和4.7)将此除法的结果推广为double?我可以阻止它吗?

我正在编写一些模板化代码来使用浮点数和双精度数据算法进行基准测试,以便与GPU实现进行比较.

我发现我的浮点代码速度较慢,在调查使用英特尔的Vtune放大器后,我发现g ++正在生成额外的x86指令(cvtps2pd/cvtpd2ps和unpcklps/unpcklpd),将一些中间结果从float转换为double然后再转回.此应用程序的性能下降几乎为10%.

在使用标志-Wdouble-promotion(其中BTW未包含在-Wall或-Wextra中)进行编译之后,确定g ++警告我结果正在被提升.

我将其简化为如下所示的简单测试用例.请注意,c ++代码的顺序会影响生成的代码.复合语句(T d1 = log(r)/ r;)产生警告,而分离的版本不产生(T d = log(r); d/= r;).

以下用g ++ - 4.6.3-1ubuntu5和g ++ - 4.7.3-2ubuntu1~12.04编译,结果相同.

编译标志是:

g ++ - 4.7 -O2 -Wouble-promotion -Wextra -Wall -pedantic -Werror -std = c ++ 0x test.cpp -o test

#include <cstdlib>
#include <iostream>
#include <cmath>

template <typename T>
T f()
{
        T r = static_cast<T>(0.001);

        // Gives no double promotion warning
        T d = log(r);
        d/=r;
        // Promotes to double
        T d1 = log(r)/r;

        return d+d1;
} …
Run Code Online (Sandbox Code Playgroud)

c++ templates g++ intel-vtune floating-point-precision

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