吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1089|回复: 21
收起左侧

[其他原创] 软件注册码RSA签名实现Demo(C#)

  [复制链接]
msmvc 发表于 2024-9-18 18:39
本帖最后由 msmvc 于 2024-9-19 13:31 编辑

スクリーンショット 2024-09-18 192418.png

说明:
共3部分
第1部分:RSA密钥
生成用于签名的私钥和公钥(2048位)
私钥用于生成签名,保存在软件开发者手中,如果泄露就可能随便生成注册码了
公钥用于验证签名,保存在软件中

第2部分:生成签名
一般软件注册时需要提供一些注册信息,如邮件,软件版本,有效期,机器码(机器码是为了绑定机器,使注册码只在当前机器上有效)等信息
注册信息+私钥生成签名也就是注册码(SIGN:后面的内容才是生成的签名)

第3部分:验证签名
使用公钥可以把签名还原,得到注册信息,一般验证注册信息中的机器码和本机机器码是否相同,有效期是否失效
以上代码使用FX4.8 +  C# 实现

SoftwareLicenseDemo.zip (28.29 KB, 下载次数: 54)

--2014/09/19更新------------------------------
RSA 加解密 中,可以根据具体的应用场景分别使用公钥加密,私钥解密,或私钥加密,公钥解密
这两种方式有不同的目的和用途:
1. 公钥加密,私钥解密:用于数据加密这种方式用于加密敏感数据,确保只有拥有私钥的人可以解密。这个过程的安全性依赖于私钥的保密性。
  • 加密方:使用接收方的公钥加密数据。
  • 解密方:只有接收方的私钥可以解密。
应用场景:
  • 机密数据的传输,例如发送加密信息,确保只有特定的接收者能够解密阅读。
工作原理:
  • 发送者使用接收者的公钥加密数据,任何人都可以获取这个公钥进行加密。
  • 接收者使用自己的私钥解密数据,确保只有合法接收方可以读取信息。

[C#] 纯文本查看 复制代码
// 公钥加密,私钥解密
public static string EncryptWithPublicKey(string plainText, RSAParameters publicKey)
{
    byte[] data = Encoding.UTF8.GetBytes(plainText);
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(publicKey);
        byte[] encryptedData = rsa.Encrypt(data, false);
        return Convert.ToBase64String(encryptedData);
    }
}

public static string DecryptWithPrivateKey(string encryptedText, RSAParameters privateKey)
{
    byte[] data = Convert.FromBase64String(encryptedText);
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(privateKey);
        byte[] decryptedData = rsa.Decrypt(data, false);
        return Encoding.UTF8.GetString(decryptedData);
    }
}


2. 私钥加密,公钥解密(验证):用于数字签名
这种方式用于创建数字签名,验证数据的真实性和完整性。它并不用于加密保密数据,而是用于签名验证,确保数据没有被篡改,并确认发送者的身份。
  • 加密方(签名方):使用自己的私钥对数据进行加密,生成数字签名。
  • 解密方(验证方):使用发送者的公钥解密并验证签名,确保数据未被篡改。
应用场景:
  • 生成数字签名,验证发送者的身份和数据的完整性,广泛应用于数字证书、软件分发等场景。
工作原理:
  • 发送者使用自己的私钥生成签名(加密哈希值)。
  • 接收者使用发送者的公钥验证签名,确认数据的真实性和发送者身份。

[C#] 纯文本查看 复制代码
// 私钥加密(签名),公钥解密(验证)
public static string SignData(string data, RSAParameters privateKey)
{
    byte[] dataBytes = Encoding.UTF8.GetBytes(data);
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(privateKey);
        byte[] signature = rsa.SignData(dataBytes, new SHA256CryptoServiceProvider());
        return Convert.ToBase64String(signature);
    }
}

public static bool VerifySignature(string data, string signature, RSAParameters publicKey)
{
    byte[] dataBytes = Encoding.UTF8.GetBytes(data);
    byte[] signatureBytes = Convert.FromBase64String(signature);
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(publicKey);
        return rsa.VerifyData(dataBytes, new SHA256CryptoServiceProvider(), signatureBytes);
    }
}



免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
xiaoxigua2017 + 1 用心讨论,共获提升!
redapple2015 + 1 + 1 用心讨论,共获提升!
wushaominkk + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wyl0205 发表于 2024-9-18 19:02
源码呢?现在这样是违规的
Say 发表于 2024-9-18 19:37
 楼主| msmvc 发表于 2024-9-18 20:13
 楼主| msmvc 发表于 2024-9-18 20:14
Say 发表于 2024-9-18 19:37
放错区域了。看你不知道我才告诉你的

应该放在哪个版块?
lml0126 发表于 2024-9-18 21:46
好东东,期待放上来
justwz 发表于 2024-9-18 21:48
感谢楼主分享 收藏了
艾莉希雅 发表于 2024-9-18 22:25
签名这种不参与计算的,可能会被人爆菊
建议还是留一两个参数是解密出来的比较好
zmingzhi 发表于 2024-9-18 22:40
感谢楼主分享 收藏
redapple2015 发表于 2024-9-19 08:33
有源码看看了。现在学习阶段
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表