AnyChat技术支持论坛

标题: 2016-01-12 非对称加密算法(RSA)签名示例代码 [打印本页]

作者: admin    时间: 2016-1-12 14:37
标题: 2016-01-12 非对称加密算法(RSA)签名示例代码
通常来说,非对称加密签名及验证的工作流程为:
    1、业务服务器只需要实现使用私钥进行签名(RsaSign),然后将签名结果(timestamp、sigstr)反馈给客户端;
    2、在客户端调用LoginEx接口进行登录;
    3、AnyChat服务器收到登录请求后,会使用公钥进行签名信息验证(RsaVerify),确认登录者身份,反馈结果给客户端;
    4、客户端将触发登录回调事件:OnAnyChatLoginResult(int errorcode),如果errorcode=0表示身份验证成功。


Java:
        public static void main(String[] args) throws InterruptedException, IOException
        {
                String privatekey =  
                                "-----BEGIN RSA PRIVATE KEY-----\n" +
                                "MIICWwIBAAKBgQDc/sgvXXKZrr8lX9pZgZMO9y8jRq/s3YYlJ/BayEvj9EIVhiXG\r"+
                                "A3rZwhh0+L4UdkPE5o/t6Bh1oY6nlGvkFuENgFwkRzrn2qP7wl3MgJD8WW6OM4JA\r"+
                                "1fd2Wwt/TUENQeoN30bluy4ZQPby+bGl3ic5JW0hXhEWHAjk7e0ruSxRbwIDAQAB\r"+
                                "AoGALbcSyCGHlFz+s4eJjpxsRFtDyANWXyRQHJ2PbegjMsuTZAp1A+oyXpt1HbVa\r"+
                                "9LamPDQJsAgkDylVbjsYun01Hoh0i+lV5rOwWpwZC1jo4ohS1MAVPaRofCD2BlCJ\r"+
                                "ML3i+qIznqJu7VpC2YjULTVphUf5guUetr+iP1lkNrKhRNkCQQDxwn7BO9qw5V53\r"+
                                "/5CG9z+PAPYR2Be+cD/cuGP8ooovkZ+tJ76UXSkwXwveDFf8civdkUB9v0P/EKyS\r"+
                                "UMp8u4hNAkEA6gMtlFA1+ju6pTjMnxa8cmgPYXinY70OxgpOfyz7Erp2Xmq+4J3Y\r"+
                                "AQeerY/aJ3K4itKgyyPXsi9cCPxv6UxeqwJAQHAS0PZfJ986+skHgLHOIxOigscS\r"+
                                "LRRGMVKEdAXuxxcNdF2vkmPyYo4y35ByszrLLldU1S9xtD6BgM4/6lch0QJASVEn\r"+
                                "laEv2C+ggaVzDqD798g8kWhQ4YHZQBj4kQXRwANllJ1TImKxy1jM0UoRqmxZ/zyQ\r"+
                                "njSjnrMR3crhcTG5MwJANPjy150Mf+J3SHz6s1aRddggzLOMzDtObUs60ZQRi6PS\r"+
                                "88K3sAbX5C1in9B0Dg5TOPanEEzsonYVIs1UZ6DqAg==\r"+
                                "\n-----END RSA PRIVATE KEY-----\n";
               
                String publickey =   
                                "-----BEGIN PUBLIC KEY-----\n"+
                                "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDc/sgvXXKZrr8lX9pZgZMO9y8j\r"+
                                "Rq/s3YYlJ/BayEvj9EIVhiXGA3rZwhh0+L4UdkPE5o/t6Bh1oY6nlGvkFuENgFwk\r"+
                                "Rzrn2qP7wl3MgJD8WW6OM4JA1fd2Wwt/TUENQeoN30bluy4ZQPby+bGl3ic5JW0h\r"+
                                "XhEWHAjk7e0ruSxRbwIDAQAB\r"+
                                "\n-----END PUBLIC KEY-----\n";
               
                AnyChatOutParam signResult = new AnyChatOutParam();
                int userid = -1;
                String appid = "CED78A73-134B-4403-9992-83B79702C4A0";
                int errorcode = AnyChatSign.RsaSign(userid, appid, privatekey, signResult);
                if(errorcode == 0)
                {
                        int timestamp = signResult.GetIntValue();
                        String sigstr = signResult.GetStrValue();
                        System.out.print("rsa sign result, timestamp: " + timestamp + " sigstr: " + sigstr + "\r\n");
                        
                        errorcode = AnyChatSign.RsaVerify(userid, appid, sigstr, timestamp, publickey);
                        System.out.print("rsa verify result, errorcode: " + errorcode + "\r\n");
                }
        }

输出:
rsa sign result, timestamp: 1452580453 sigstr: TBK5M9FPcDfZ8/bawWDoYW82J9yAw1Sa8GURKf4fgRrOhYGk/ODOHODNih4ox2F4gXPdq5UK1kRGbu114dNSK2ITLfhupQ5EMxIF9Xy1uR/z7mIWaViMGKMDLNd9b4p6r9b3vDBmh1OXV9oknaEELLQLiw6Ka3JIj/qTmKKPD6E=
rsa verify result, errorcode: 0


有关RSA加密算法:
  互联网时代,密码和网络安全是通信的基础,无论是微信聊天,还是淘宝交易,都需要密码技术保障个人隐私和财产安全。

  而现在的大部分加密,都由RSA算法完成,它基于一个非常简单的数论事实:

  将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

  例如在一套 RSA 算法下,给定一对解密密钥3和5,由用户自己保存,那么3和5的乘积15,就成为公开的加密密钥。

  当把3和5变成1024位的素数A和B时,令C是A和B的乘积。那么验证A乘以B等于C,是一件计算起来比较简单的事,即用户自己的密码可以获得通过;但是要从C倒推回A和B,却是无比的艰难,其运算时间超出计算机的能力,所以密码很难被破解。

  所以RSA可以在公开加密密钥、加密和解密算法的情况下,通过验证和求解在时间复杂度上的极端不对称性,建立电子加密的基础。

  RSA 是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。

  今天,只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。










欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3