首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端加密的最佳实践

客户端加密的最佳实践
EN

Stack Overflow用户
提问于 2012-04-28 07:42:04
回答 3查看 971关注 0票数 0

我目前正在使用允许“加密”选项的web。

我可以设置我的帐户有一个“共享密钥”,并使用这个密钥,我应该加密客户端上的所有数据,然后提交给服务器。

他们的网站上的详细信息:

加密算法: DES 阻塞模式:欧洲央行 填充: PKCS7或PKCS5 (它们是可互换的)

在这个意义上,“共享密钥”是一种对称算法--用于解密/加密的密钥,尽管我在这个问题上可能弄错了。

我想知道在客户端处理这个场景的最佳实践是什么?

如果我的应用程序的逻辑应该使用这个密钥来加密数据,那么它对黑客是如何安全的呢?

请注意,我的应用程序是用C#编写的,这意味着它实际上可以免费解压缩。

EN

回答 3

Stack Overflow用户

发布于 2012-04-28 09:00:16

除非您的密钥被泄露,否则数据的传输是安全的--任何窃听您客户端服务器连接的人都无法解密您的数据,除非他们拥有您的密钥。

您的主要挑战在于客户端和服务器上本地密钥的安全存储。为此,我建议查看通过ProtectedData类在.NET中公开的(DPAPI)。

票数 1
EN

Stack Overflow用户

发布于 2012-04-28 08:27:00

如果shared key的意思是public key,那么大多数情况下,您使用的是一种称为非对称加密的算法。这样你对黑客是安全的,因为公钥不能用来解密数据。

如果它是对称的,那么这一切都取决于密钥的安全性。您可以将其与程序分开存储(因此用户可以将其安全地存储在闪存驱动器中)。因此,每个用户都必须拥有自己的密钥,因此不可能为所有用户使用一个对称密钥。

票数 0
EN

Stack Overflow用户

发布于 2012-04-28 10:36:55

这样,客户端将使用不同的密钥对数据进行加密,服务器将使用不同的密钥进行解密。这被称为非对称加密/解密。

.NET框架为非对称加密提供了RSACryptoServiceProvider和DSACryptoServiceProvider类。当使用默认构造函数创建新实例时,这些类将创建一个公钥/私钥对。非对称密钥可以存储在多个会话中使用,也可以只为一个会话生成。虽然公用钥匙可以普遍提供,但私钥应严密保管。

代码语言:javascript
复制
For example [VB.NET]: 

Dim cspParam as CspParameters = new CspParameters()
cspParam.Flags = CspProviderFlags.UseMachineKeyStore
Dim RSA As System.Security.Cryptography.RSACryptoServiceProvider
           = New System.Security.Cryptography.RSACryptoServiceProvider(cspParam)

The key information from the cspParam object above can be saved via:

Dim publicKey as String = RSA.ToXmlString(False) ' gets the public key
Dim privateKey as String = RSA.ToXmlString(True) ' gets the private key

The above methods enable you to convert the public and / or private keys to Xml Strings.
 And of course, as you would guess, there is a corresponding FromXmlString method to get them back. 
 So to encrypt some data with the Public key. The no-parameter constructor is used as we are loading our keys from XML and 
 do not need to create a new cspParams object:

Dim str as String = "HelloThere"
Dim RSA2 As RSACryptoServiceProvider = New RSACryptoServiceProvider()
' ---Load the private key---
RSA2.FromXmlString(privateKey)
Dim EncryptedStrAsByt() As Byte =RSA2.Encrypt(System.Text.Encoding.Unicode.GetBytes(str),False)
Dim EncryptedStrAsString = System.Text.Encoding.Unicode.GetString(EncryptedStrAsByt)

and as a "proof of concept", to DECRYPT the same data, but now using the Public key:

Dim RSA3 As RSACryptoServiceProvider = New RSACryptoServiceProvider(cspParam)
'---Load the Public key---
RSA3.FromXmlString(publicKey)
Dim DecryptedStrAsByt() As Byte =RSA3.Decrypt(System.Text.Encoding.Unicode.GetBytes(EncryptedStrAsString), False)
Dim DecryptedStrAsString = System.Text.Encoding.Unicode.GetString(DecryptedStrAsByt)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10361614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档