none
关于RSA加密的问题! RRS feed

  • 问题

  • 大家好,请教一个问题:

    RSA产生的公钥为:<RSAKeyValue><Modulus>qrU3h/dWNtpsplizPp3tnM1EdDres+LTVioD2qTM3AJ/oeDWTe6FQ/BJGa/yIVEisbYFQeyLwLTNqL5fYVIy9qb6+9rKlAXTunrQxw8NrIMbjZ9rEFINmI43K/vhy9cim0zR9SlLRsxaFLUwUtHSZT6LFDUPksQNRwmPqA7swBk=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>

    密钥为:

    <RSAKeyValue><Modulus>qrU3h/dWNtpsplizPp3tnM1EdDres+LTVioD2qTM3AJ/oeDWTe6FQ/BJGa/yIVEisbYFQeyLwLTNqL5fYVIy9qb6+9rKlAXTunrQxw8NrIMbjZ9rEFINmI43K/vhy9cim0zR9SlLRsxaFLUwUtHSZT6LFDUPksQNRwmPqA7swBk=</Modulus><Exponent>AQAB</Exponent><P>1uVydbze1ixi//iChYXyrz043j/rIv0YAi0Kmn8xrHNcSncHQzo+2qG8/rrG8PhlrPw37OztM7ustC9OlSOrCQ==</P><Q>y1wNeUsLH1ZWjxgogrVlO/y8brSMU6AoD13GnDk9/9Ni7LW86YjigrDjhCGLnzGGm+oBn4iF+UKmC5Tj5sngkQ==</Q><DP>sk8iYTU9RUMBRlmCm54gV22aQTeSOK7++9c5xCYkJm52Nsd6/DpZKvonIsoCBrJlU1rYYLvauiFQVRYnwzIcWQ==</DP><DQ>mCEmBz4HdQr+uA+HhriyodyhDmRMseaW8V/iy03bPr1hPNl8GGyJnuE7YsZBj/bZz1uQmUrlhqHAW9unXihZsQ==</DQ><InverseQ>E8xMm4vlsN5aZe7pOa84BhaH8W19aTnlg1mxRo424NSvqsIxL3YgDXOV893aGYA6HZ+/XlJOkB9CiaLww2dbTQ==</InverseQ><D>D3A6KHLG+kkAwH6PH1+bCK5LvZNBZtVhtY4xMQnseQ1Ey7gQyZWDueQ2SDtwU3EKCTZj/VVOQkxXuSYWbC/J6fzWZY2p2kWFfebURfSb+wiNX4A9t49I9se3srHYDrzVi27ttKNyEKic7PZMQIWvndjhYuESpz67HH68BtMXf4E=</D></RSAKeyValue>

    现在有个问题,我是用公钥加的密,再用密钥来解。但是密钥中不是包含了公钥的部分了吗?这样我发给用户,用户不就知道我是用什么密码加密的吗?不是起不到加密的作用了吗?望大家发表一下!

    谢谢!

     

    2010年4月27日 14:05

答案

  • 你好!

         这个加密方法主要用于确认发布者身份,防止恶意篡改数据!

         用户可以公钥来解码你的数据,实际上这正是你的目的,你发布的软件或传输的数据就是希望用户可以看到和使用的,但是用户没有私钥,他不能像你一样发布带你的签名的数据或软件,其他人也不能,因为只有你才有私钥,其他人没有,所以可以确定这些数据和软件是你发布的,比较安全!当然前提是你不泄露私钥!


    周雪峰
    2010年4月28日 1:41
    版主
  • 呵呵,和你一起讨论一下。

    1.RSA加密演算法是一种非对称加密演算法。也就是一个公钥一个私钥。http://zh.wikipedia.org/zh/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95

    2.公钥和私钥不在一起,一般是分开放置的。比如,证书,公钥大家都知道,你可以和我通信,你发给我的消息,使用我的公钥加密,只有我能解密消息。

    3.数据在传输过程中涉及到,安全性、完整性和一致性。也就保证数据传输安全,不会丢失,服务端和客户端数据一样。

        安全是使用加密key来解决,

       哈希算法,会保证,数据的完整,在传输钱对数据做哈希,客户端接受后,再哈希运算,比较一下两个哈希值就知道数据是否完整和一致。

       我们把哈希值使用key加密以后,这个过程叫签名,只有知道对应的密钥或者公钥的另外一方才能验证消息签名。

    你可以看一下我的文章。

      WSE3.0构建Web服务安全(2):非对称加密、公钥、密钥、证书、签名的区别和联系以及X.509 证书的获得和管理

     

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年4月28日 2:01
    版主

全部回复

  • 你好!

         这个加密方法主要用于确认发布者身份,防止恶意篡改数据!

         用户可以公钥来解码你的数据,实际上这正是你的目的,你发布的软件或传输的数据就是希望用户可以看到和使用的,但是用户没有私钥,他不能像你一样发布带你的签名的数据或软件,其他人也不能,因为只有你才有私钥,其他人没有,所以可以确定这些数据和软件是你发布的,比较安全!当然前提是你不泄露私钥!


    周雪峰
    2010年4月28日 1:41
    版主
  • 呵呵,和你一起讨论一下。

    1.RSA加密演算法是一种非对称加密演算法。也就是一个公钥一个私钥。http://zh.wikipedia.org/zh/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95

    2.公钥和私钥不在一起,一般是分开放置的。比如,证书,公钥大家都知道,你可以和我通信,你发给我的消息,使用我的公钥加密,只有我能解密消息。

    3.数据在传输过程中涉及到,安全性、完整性和一致性。也就保证数据传输安全,不会丢失,服务端和客户端数据一样。

        安全是使用加密key来解决,

       哈希算法,会保证,数据的完整,在传输钱对数据做哈希,客户端接受后,再哈希运算,比较一下两个哈希值就知道数据是否完整和一致。

       我们把哈希值使用key加密以后,这个过程叫签名,只有知道对应的密钥或者公钥的另外一方才能验证消息签名。

    你可以看一下我的文章。

      WSE3.0构建Web服务安全(2):非对称加密、公钥、密钥、证书、签名的区别和联系以及X.509 证书的获得和管理

     

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年4月28日 2:01
    版主
  • RSA 是非对称加密的,公钥可以用于加密,但是不可以用于解密。 所以公钥是可以公开发布的,保管好私钥就是
    2010年4月28日 7:32
  • RSA 是非对称加密的,公钥可以用于加密,但是不可以用于解密。 所以公钥是可以公开发布的,保管好私钥就是


    我的理解 私钥是可以加密的,然后也只有公钥可以解密。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年4月28日 11:12
    版主
  • WSE3.0构建Web服务安全(2):非对称加密、公钥、密钥、证书、签名的区别和联系以及X.509 证书的获得和管理

     

    消息签名就是个很好的例子啊。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年4月28日 11:13
    版主
  • RSA 是非对称加密的,公钥可以用于加密,但是不可以用于解密。 所以公钥是可以公开发布的,保管好私钥就是


    我的理解 私钥是可以加密的,然后也只有公钥可以解密。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum

     

    如果用公钥加密的话,在密钥文件中不是还包含了公钥文件中的内容吗?

    2010年4月29日 8:46
  • RSA 是非对称加密的,公钥可以用于加密,但是不可以用于解密。 所以公钥是可以公开发布的,保管好私钥就是


    我的理解 私钥是可以加密的,然后也只有公钥可以解密。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum

     

    如果用公钥加密的话,在密钥文件中不是还包含了公钥文件中的内容吗?


    呃。。。不知道你想要 RSA 加密一些什么东西,如此在意密钥中是否包括公钥。

    RSA 加密的最大特点即是:即是某人同时得到了密文和公钥,他也无法解密,因为他没有私钥。

    所以,公钥本来就是可以公开的,并且不影响保密性。

    ps: 我认为 Frank Xu Lee 搞反了公钥与私钥的用途。。。。。例如 MSDN 上的例子

    http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider(v=VS.100).aspx

    2010年4月29日 14:27
  • 比如我有一个密钥,然后所有人都有我的公钥

    密钥加密,公钥解密,这个就是签名,因为只有我能加密,而所有人都能看到,可以确保信息是我发布的而且没有被篡改。

    公钥加密,密钥解密,这个就是加密,因为只有我能解密,别人都看不到。当然任何人都可以发送给我,我也不知道到底是谁发布的(虽然可以在内容里写上是谁发的,但谁都能写)。

     

    因此,实际使用的时候往往是一对对使用的,如A和B,分别都有共钥和密钥:

    A给B发信息,先用A自己的密钥签名,然后用B的共钥加密,发送给B;

    B收到后先用B自己的密钥解密(保证完整性),然后再用A的公钥解密(保证是A发的,且没被篡改);

    而这整个过程中需要用到两次密钥,由于密钥是保密的,因此伪造的可能性几乎为0,可信度几乎100%。

    如果B给A发信息的话也一样的流程。如果是N个人,那么就需要N个人的公钥才能确保通信。


    霸王
    2010年4月30日 16:16
  • RSA 是非对称加密的,公钥可以用于加密,但是不可以用于解密。 所以公钥是可以公开发布的,保管好私钥就是


    我的理解 私钥是可以加密的,然后也只有公钥可以解密。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum

     

    如果用公钥加密的话,在密钥文件中不是还包含了公钥文件中的内容吗?


    呃。。。不知道你想要 RSA 加密一些什么东西,如此在意密钥中是否包括公钥。

    RSA 加密的最大特点即是:即是某人同时得到了密文和公钥,他也无法解密,因为他没有私钥。

    所以,公钥本来就是可以公开的,并且不影响保密性。

    ps: 我认为 Frank Xu Lee 搞反了公钥与私钥的用途。。。。。例如 MSDN 上的例子

    http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider(v=VS.100).aspx


    RSA 是非对称加密的,公钥可以用于加密,但是不可以用于解密。 所以公钥是可以公开发布的,保管好私钥就是

    ------------------------------------------------------

    我搞反了?上面的话 可是你说的。你说的,公钥只能加密,不能解密。从算法角度考虑,,公钥可解密消息。消息签名的流程,我看过WS规范,实际流程比我们讨论的复杂的多。我认同消息接收者A,也就是密钥持有者A,可以使用密钥解密 其它人,使用A的公钥发送给A的消息,这个观点。但是我不同意说公钥不可以用于解密。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年5月1日 3:48
    版主
  • 比如我有一个密钥,然后所有人都有我的公钥

    。。。。。。。。。

    ---------------------------------

    这里有消息接受和发送方之分。密钥持有者A 一般是消息接收者,任何发送者B1---Bn,如果想和A通信的话,都可以使用A的公钥来加密消息,发送给A。这个消息保证的是,我想给A说话,但是我不希望第三方知道我和A说了什么。

     

     

     

     

     

     

     

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
    欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
    欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum
    2010年5月1日 3:52
    版主
  • 私钥用来加密散列函数生成的摘要,对方用公钥解密摘要,这就是签名吧。
    2010年5月5日 2:16