首页
社区
课程
招聘
[求助]逆向小白咨询RSA签名
2023-11-12 02:15 2334

[求助]逆向小白咨询RSA签名

2023-11-12 02:15
2334

这是一个RSA-SHA1 的验签过程,这个array2 该怎么理解?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public static bool CheckSignature(byte[] signature, string data)
{
    SHA1 sha = SHA1.Create();
    byte[] array = sha.ComputeHash(Encoding.ASCII.GetBytes(data));
    Console.WriteLine(data);
    RSACryptoServiceProvider rsacryptoServiceProvider = new RSACryptoServiceProvider();
    RSAParameters rsaparameters = default(RSAParameters);
    byte[] array2 = new byte[]
    {
        155, 64, 150, 8, 101, 9, 158, 124, 124, 67,
        41, 161, 162, 244, 234, 125, 226, 134, 19, 167,
        246, 47, 217, 227, 30, 5, 115, 17, 212, 95,
        221, 70, 169, 100, 174, 134, 108, 55, 117, 116,
        78, 57, 221, 72, 241, 158, 142, 251, 115, 219,
        1, 50, 70, 181, 181, 69, 70, 97, 78, 181,
        230, 35, 99, 106, 37, 91, 105, 81, 182, 22,
        47, 63, 232, 148, 116, 214, 172, 117, 226, 190,
        56, 137, 148, 69, 23, 111, 53, 198, 102, 23,
        byte.MaxValue, 196, 172, 117, 84, 145, 0, 152, 39, 48,
        219, 197, 160, 134, 222, 74, 57, 232, 35, 213,
        220, 65, 168, 149, 55, 178, 196, 140, 207, 225,
        109, 69, 63, 172, 148, 162, 43, 13
    };
    byte[] array3 = new byte[] { 1, 0, 1 };
    rsaparameters.Modulus = array2;
    rsaparameters.Exponent = array3;
    rsacryptoServiceProvider.ImportParameters(rsaparameters);
    RSAPKCS1SignatureDeformatter rsapkcs1SignatureDeformatter = new RSAPKCS1SignatureDeformatter(rsacryptoServiceProvider);
    rsapkcs1SignatureDeformatter.SetHashAlgorithm("SHA1");
    bool flag = rsapkcs1SignatureDeformatter.VerifySignature(array, signature);
    bool flag2;
    if (flag)
    {
        Console.WriteLine("The signature is valid.");
        flag2 = true;
    }
    else
    {
        Console.WriteLine("The signature is not valid.");
        flag2 = false;
    }
    return flag2;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 21
活跃值: (212)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
dswkc 2023-11-12 02:16
2
0

我照葫芦画瓢写了一段自签自验的代码(微软的模版程序),一旦加上第27行 rsacryptoServiceProvider.ImportParameters(rsaparameters); 再执行程序就会报 “密钥集不存在” . 还在学习中,很多知识都不太懂,还请大神们不吝赐教。



最后于 2023-11-12 02:32 被dswkc编辑 ,原因: 上传代码
雪    币: 10
活跃值: (379)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nikoladi 2023-11-12 09:33
3
0
array2就是公钥啊
array3是e,一般取值时65537也就是 0x010001,你这里是用大端存储的
雪    币: 21
活跃值: (212)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
dswkc 2023-11-12 12:18
4
0


那是不是意味着要找到私钥才能用他的公钥来加签验签呢?

公钥和私钥是一一配对的吗? 有且只有唯一一个私钥能和这个公钥配对?
最后于 2023-11-12 12:22 被dswkc编辑 ,原因:
雪    币: 267
活跃值: (620)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hypersine 2023-11-12 12:39
5
0
dswkc 那是不是意味着要找到私钥才能用他的公钥来加签验签呢? 公钥和私钥是一一配对的吗? 有且只有唯一一个私钥能和这个公钥配对?
1. 对,你需要私钥才能加签,验签的话只要公钥就行。
2. 公钥和私钥是一一配对的,公钥是(n, e),私钥是(n, d),二者满足e*d = 1 (mod phi(n))
雪    币: 21
活跃值: (212)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
dswkc 2023-11-12 12:50
6
0
hypersine 1. 对,你需要私钥才能加签,验签的话只要公钥就行。 2. 公钥和私钥是一一配对的,公钥是(n, e),私钥是(n, d),二者满足e*d = 1 (mod phi(n))
听起来只能爆破了,是不是有公钥求私钥基本上就是死局了。
雪    币: 267
活跃值: (620)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hypersine 2023-11-12 13:03
7
0
dswkc 听起来只能爆破了,是不是有公钥求私钥基本上就是死局了。
是的不用想了,要么换掉公钥,要么你自己找个量子计算机分解n吧
游客
登录 | 注册 方可回帖
返回