标签: rsa

我何时应该使用SHA-1,何时应该使用SHA-2?

在我的c#应用程序中,我正在使用RSA签名文件,然后由上传的人上传到我公司的数据库中,在这里我必须选择SHA-1或SHA-2来计算哈希值.
与编程中的任何其他组件一样,我知道必须有一个"在这里使用"和"在那里使用"这两个组件.
那么,什么时候?那时呢?

编辑:
我的问题是:性能有什么不同?而不是关于安全性,因为我已经知道SHA-2比SHA-1更安全.
在此链接中,不同类型的SHA-2之间的比较注意何时使用SHA-512以及何时不使用SHA-512.我需要一个关于SHA-1和SHA-2的类似论点.

c# security rsa sha digital-signature

23
推荐指数
1
解决办法
3万
查看次数

使用Java生成PKCS#1格式的RSA密钥

当我使用Java API生成RSA密钥对时,公钥以X.509格式编码,私钥以PKCS#8格式编码.我希望将它们编码为PKCS#1.这可能吗?我花了相当多的时间浏览Java文档,但还没有找到解决方案.当我使用Java和Bouncy Castle提供程序时,结果是一样的.

以下是代码片段:

KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA","BC");
keygen.initialize(1024);
KeyPair pair = keygen.generateKeyPair();
PrivateKey priv = pair.getPrivate();
PublicKey pub = pair.getPublic();
byte[] privBytes = priv.getEncoded();
byte[] pubBytes = pub.getEncoded();
Run Code Online (Sandbox Code Playgroud)

两个结果字节数组的格式为X.509(公共)和PKCS#8(私有).

任何帮助将非常感激.有一些类似的帖子,但没有一个真正回答我的问题.

谢谢

java rsa x509 pkcs#1

21
推荐指数
3
解决办法
2万
查看次数

如何在PyCrypto中使用X509证书?

我想用PyCrypto加密python中的一些数据.

但是我在使用时遇到错误key = RSA.importKey(pubkey):

RSA key format is not supported
Run Code Online (Sandbox Code Playgroud)

密钥生成时:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mycert.key -out mycert.pem
Run Code Online (Sandbox Code Playgroud)

代码是:

def encrypt(data):
    pubkey = open('mycert.pem').read()
    key = RSA.importKey(pubkey)
    cipher = PKCS1_OAEP.new(key)
    return cipher.encrypt(data)
Run Code Online (Sandbox Code Playgroud)

python openssl rsa pycrypto

21
推荐指数
1
解决办法
3万
查看次数

Java:如何从字符串生成PrivateKey?

我正在尝试对消息进行编码,SH1 RSA但我没有安全主题的经验,除了一些基本信息RSA.我被给了一个私钥作为String.我已经设法写下面的代码块来完成这项工作,但我不确定我是否正确地安全地完成了这项工作.

我不是专家,但在代码中将我的私钥作为String放置是不安全的我猜.谁能指导我?

String privateKeyString = "mykeyhere...";
byte[] privateKeyBytes = privateKeyString.getBytes();
String encodedPrivateKey = Base64.encodeToString(privateKeyBytes, Base64.URL_SAFE);

KeyFactory factory = KeyFactory.getInstance(RSA);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encodedPrivateKey.getBytes());
RSAPrivateKey privateKey = (RSAPrivateKey) factory.generatePrivate(keySpec);

Signature instance = Signature.getInstance(ALGORITHM);
instance.initSign(privateKey);
instance.update(content.getBytes());
return new String(instance.sign());
Run Code Online (Sandbox Code Playgroud)

我的私钥形式如下:

"-----BEGIN PRIVATE KEY-----\n"+
"MIIE...\n"+
"cH0iRj...\n"+
"O0Hhj...\n"+
.
.
.
"fG6...\n"+
"B6/hF...\n"+
"3Mq38...\n"+
"-----END PRIVATE KEY-----\n"
Run Code Online (Sandbox Code Playgroud)

security android rsa private-key

21
推荐指数
1
解决办法
2万
查看次数

了解JWT的RSA签名

我正在JWT(JsonWebToken)计划的帮助下实现登录系统.基本上在用户登录/登录后,服务器签署JWT并将其传递给客户端.

然后,客户端返回每个请求的令牌,服务器在发回响应之前验证令牌.

这几乎是你所期望的,但我对这个过程的逻辑有一些问题.从我读过的所有数学文章来看,似乎RSA签名使用非对称密钥进行签名.正如其名称所示,公钥暴露给客户端并且私钥保留在服务器上,使用发送到客户端的公钥对JWT进行签名并使用服务器端验证它是有意义的.私钥.

然而,在每个示例和库中,我看到它似乎是另一种方式,任何想法为什么它是这样的?如果JWT使用私钥签名并与公共密钥进行验证,那么这一点是什么?

rsa digital-signature jwt

21
推荐指数
3
解决办法
1万
查看次数

RSA:使用扩展欧几里德算法的私钥计算

我是一名高中生,正在写一篇关于RSA的论文,我正在用一些非常小的素数做一个例子.我理解系统是如何工作的,但我不能为我的生活使用扩展的欧几里德算法计算私钥.

这是我到目前为止所做的:

  • 我选择了素数p = 37和q = 89,并计算出N = 3293
  • 我计算过(p-1)(q-1)= 3168
  • 我选择了一个数字e,因此e和3168是相对素数.我正在使用标准的欧几里德算法检查这一点,这非常有效.我的e = 25

现在我只需要计算私钥d,它应该满足ed = 1(mod 3168)

使用扩展欧几里得算法找到d使得de + tN = 1我得到-887•25 + 7•3168 = 1.我把7扔掉,得到d = -887.但是,尝试解密消息时,这不起作用.

我从我的书中知道d应该是2281,并且它有效,但我无法弄清楚它们是如何达到这个数字的.

有人可以帮忙吗?我在过去的4个小时里尝试过解决这个问题,到处寻找答案.我正在手工进行扩展欧几里德算法,但由于结果有效,我的计算应该是正确的.

提前致谢,

MADS

algorithm rsa greatest-common-divisor private-key

20
推荐指数
1
解决办法
2万
查看次数

在Java中加载RSA私钥(algid解析错误,而不是序列)

我正在尝试将使用ssl生成的私有RSA密钥加载到java中,我的代码是:

生成密钥:

openssl genrsa -out mykey.pem 1024
Run Code Online (Sandbox Code Playgroud)

结果:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCUibP4fY2PA/sGMKMbU6usuIGcOAqgQjD6c2ylVo05Oz7pgjnE
+O0l2MFRUYUGT5KKk/W+0cAXkxaQHE3n8A8X1mHT8eMDmWnzz0PeYjDE8LQmAw8R
Y2FnVKFAB36BIjdb5FsZmCk5QYKU5+nWLMqH/j/IR5AyX5wR2SMoslUg2QIDAQAB
AoGAeJ1s7638IhLIZtldyRXjRKi6ToFPV50IKodJxOSIXt3WE0V05ZaA84eUSxUY
IOzCgRbuqVmnUz1USAdD18AecC8qc7tXTRALLy7q8fxklPwmGPUOvTFmI7gRMUnv
cWrq1gySk3SKpj0YmWnuY9Xmd2+xoWLzUeFD1CROY5OTjIECQQDDlp1+Al7+duR0
XyMlkWLIk0nIbkQ5zlTAEipzmaeTSOJi6YG3EMMz3AGuZb7tw6HFxWqeg1hyKJ+T
cTM3WTdJAkEAwmrCDKE29n3wFOBKsZZFQbDgVOUXCBs2ubEI+ALe1DJU5BlfnrhJ
OINRCNgnwSFNbwxDTkDpR6J6Av2ElAvNEQJAV0dVvk5Wj50Ecz2lFHWdLD41taAn
B9igDxnMIcvWcK4cf+ENhmCPiwvJIEa8/aLIBNYErvmTtVWVaBkirrc8KQJABr+z
+sJB6S6X/fGHRkDkKJKeRvQo54QiUzHdENbwq0cQAVcMJbNZ/1c3oen2/1JLoNY5
I+dG8dCnEaGBT65VMQJBAIDqH1Kqs5tb51cpt6h9ot31SUVud5pSML/babwp3pRs
1s6poreym4PkAyRug0Dgcj1zVLt25TlOHvrL9r3Swq8=
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

加载:

String privKeyPEM=readFile("mykey.pem");
privKeyPEM= privKeyPEM.replace("-----BEGIN RSA PRIVATE KEY-----", "").replace("\n", "");
// Remove the first and last lines
privKeyPEM = privKeyPEM.replace("-----END RSA PRIVATE KEY-----", "");
System.out.println(privKeyPEM);

// Base64 decode the data
byte [] encoded = Base64.decode(privKeyPEM);

// PKCS8 decode the encoded RSA private key
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
KeyFactory kf …
Run Code Online (Sandbox Code Playgroud)

java encryption openssl rsa

20
推荐指数
6
解决办法
4万
查看次数

RSA加密问题[有效载荷数据的大小]

RSA加密只能处理有限的数据有效载荷吗?......我和理论混淆了......理论上没有关于这个的说明......

cryptography rsa

19
推荐指数
2
解决办法
3万
查看次数

如何从DER/PEM文件中获取SecKeyRef

我需要将我的iPhone应用程序与系统集成,他们需要通过给定的公钥加密数据,有3种不同格式的文件.xml .der和.pem,我研究过并发现了一些关于从中获取SecKeyRef的文章DER/PEM,但它们总是返回零.以下是我的代码:

NSString *pkFilePath = [[NSBundle mainBundle] pathForResource:@"PKFile" ofType:@"der"];
NSData *pkData = [NSData dataWithContentsOfFile:pkFilePath]; 

SecCertificateRef   cert; 
cert = SecCertificateCreateWithData(NULL, (CFDataRef) pkData);
assert(cert != NULL);

OSStatus err;

    if (cert != NULL) {
        err = SecItemAdd(
                         (CFDictionaryRef) [NSDictionary dictionaryWithObjectsAndKeys:
                                            (id) kSecClassCertificate,  kSecClass, 
                                            (id) cert,                  kSecValueRef,
                                            nil
                                            ], 
                         NULL
                         );
        if ( (err == errSecSuccess) || (err == errSecDuplicateItem) ) {
            CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (const void **) &cert, 1, NULL); 
            SecPolicyRef policy = SecPolicyCreateBasicX509();
            SecTrustRef trust;
            SecTrustCreateWithCertificates(certs, policy, &trust);
            SecTrustResultType trustResult;
            SecTrustEvaluate(trust, …
Run Code Online (Sandbox Code Playgroud)

iphone rsa pem der public-key

19
推荐指数
3
解决办法
2万
查看次数

为我的服务器提供安全的Facebook身份验证

我想构建一个小型移动应用程序(Android和iOS)和一个带有REST Api的小后端服务器.

我的应用用户(Android或iOS)需要在Facebook上登录.我通过使用facebooks mobile sdk来做到这一点.登录成功后,facebook sdk将返回authentificationToken,现在在用户智能手机上.

这个想法如下:每当我的应用程序需要一些数据时,应用程序将通过HTTPS与我的服务器后端(REST)进行协作.例如:应用程序进行简单的HTTP GET并传递检索到的Facebook authenticationToken.我的服务器获取此facebook authenticationToken并使用此令牌来确定用户是否经过身份验证并检索Facebook个人资料信息(名字,姓氏等).因此,服务器也与facebook联系,并为HTTP GET请求生成个性化响应.

我的问题是:

  1. 是否真的足以为每个REST API调用传递此facebookAuthentication令牌,以使服务器检索正确的关联Facebook用户?
  2. 我使用HTTPS,所以我猜,连接足够加密,对吧?
  3. 我想我需要一些签名机制,所以签署每个REST API调用(通过HTTPS)以确保仅从我的移动应用程序发送facebookAuthentication令牌.我会通过使用带有SHA-1的RSA来签署任何REST API调用.但是这种方法的问题是:客户端需要将私钥存储在App中的某个位置(用于签名请求),服务器知道公钥(用于签名匹配).它是否正确?如果是的话,我认为这是一个很大的安全问题,因为移动应用程序(特别是android)可以被反编译以获取私钥.如何在我的应用程序中安全地存储此私钥?是否有其他可以推荐的签名系统?

Bt:你知道一个适用于iOS和Android的好RSA lib吗?

android facebook rsa digital-signature ios

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