|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
归根到底,Java跨平台可以,但是要重新编写代码,否则还分什么J2EE/J2SE/J2ME呢!加密能够匡助回护数据不被检察和修正,而且能够匡助在本不平安的信道上供应平安的通讯体例。比方,可使用加密算法对数据举行加密,在加密形态下传输数据,然后由预定的吸收方对数据举行解密。假如第三方截获了加密的数据,解密数据是很坚苦的。
为了到达这些目标,您可使用算法和常规的组合(称作加密基元)来创立加密计划。包含私钥加密(对称加密)、公钥加密(不合错误称加密)、加密署名和加密哈希。
我们利用公钥加密(不合错误称加密)来完成注册码的算法。
公钥加密利用一个必需对未经受权的用户保密的私钥和一个能够对任何人公然的公钥。公钥和私钥都在数学上相干联;用公钥加密的数据只能用私钥解密,而用私钥署名的数据只能用公钥考证。
关于注册码来讲,我们利用私钥来对一个字符串(用户名)署名,然后利用公钥对这个署名(注册码)举行考证。因为公钥只能用于考证,以是我们能够宁神把公钥分收回往;私钥匙用来举行署名的,以是私钥匙要保留在开辟者手中的。如许就到达了注册认证的目标。今朝利用“用户名、注册码”形式注册的软件都应当是利用这一手艺。
起首我们天生本人要利用的一个公钥和私钥。
PrivatersaAsNewSecurity.Cryptography.RSACryptoServiceProvider
RSACryptoServiceProvider类供应RSA算法的完成实行不合错误称加密息争密。经由过程ToXMLString就能够天生我们必要的公钥和私钥。
rsa.ToXmlString(False)
rsa.ToXmlString(True)
当参数为False的时分,仅天生公钥;True的时分将会把公钥和私钥全体天生。我们一样平常经由过程ToXmlString(False)失掉一个公钥字符串;经由过程ToXmlString(True)失掉一个私钥字符串(固然个中含有公钥)。我们能够将这两个密钥保留在本机下面,经由过程字符串常量界说并利用。也就是说我们的注册信息将利用独一的公钥和私钥。
然后我们经由过程公钥和私钥对指定的字符串举行署名。
rsa.FromXmlString(PRIVATE_KEY)
DimfAsNewSecurity.Cryptography.RSAPKCS1SignatureFormatter(rsa)
f.SetHashAlgorithm("SHA1")
Dimsource()AsByte=System.Text.ASCIIEncoding.ASCII.GetBytes(UID)
DimshaAsNewSecurity.Cryptography.SHA1Managed
Dimresult()AsByte=sha.ComputeHash(source)
Dimregkey()AsByte=f.CreateSignature(result)
SerialNumber=Convert.ToBase64String(regkey)
经由过程方才失掉的私钥从头初始化rsa工具,然后经由过程RSAPKCS1SignatureFormatter类来举行署名。我们将输出的字符串转化成字节数组(我们这里默许用户名只能由ASCII字符构成),经由过程SHA1哈西算法盘算其哈希值。再利用CreateSignature办法将失掉的哈西值举行署名。最初我们将失掉的字节数组转化成字符串作为注册码。这就是天生注册码的历程。我们能够反复利用这一段程序对分歧的用户名举行署名,从而失掉与之对应的分歧注册码。
最初我们把方才失掉的用户名和注册码举行考证。
rsa.FromXmlString(PUBLIC_KEY)
DimfAsNewSecurity.Cryptography.RSAPKCS1SignatureDeformatter(rsa)
f.SetHashAlgorithm("SHA1")
Dimkey()AsByte=Convert.FromBase64String(SerialNumber)
DimshaAsNewSecurity.Cryptography.SHA1Managed
Dimname()AsByte=sha.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(UID))
Result=f.VerifySignature(name,key)
这一次我们利用公钥来初始化rsa工具,然后经由过程RSAPKCS1SignatureDeformatter类来考证署名。我们将失掉的注册码反向转化为字节数组;并将用户名举行哈西盘算失掉哈西值。最初经由过程VerifySignature举行考证。
从下面的程序能够看出,天生注册码必要私钥(私钥内附带公钥信息),并且能够天生恣意多的用户名、注册码对。而经由过程公钥,我们只能举行考证而不克不及天生。以是公钥能够宁神的发放给一切的用户举行考证,而私钥却不克不及。以是在刊行的版本中能够附带公钥和考证算法。由于即使用户失掉了公钥和考证算法也没法复杂的破解。
如今收集下流行的注册机,很年夜水平上是破解了软件的私钥,从而到达无穷制的天生所必要的注册信息。可是假如用户反编译你的产物,而且修正了两头代码,那末它将会绕过注册的判别逻辑。这就不是这一篇所能办理的成绩了。由于便是你利用了WebService手艺举行在线激活或注册,仍是能够经由过程收集侦听来剖析服务器的信息,摹拟一个假的服务器来举行的。
我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:) |
|