Ejemplo n.º 1
0
        /**
        ** 加密方法
        *
        * @param source
        *            : 明文
        * @param e
        *            公钥
        * @param n
        * @return 密文 带","
        * @
        */
        public static String encrypt(String source, BigInteger e, BigInteger n,
                                     int numBit)
        {
            String text = System.Web.HttpUtility.UrlEncode(source, Encoding.UTF8);//URLEncoder.encode(source, "UTF-8");// 为了支持汉字、汉字和英文混排

            if (text == null || "".Equals(text))
            {
                throw new Exception("明文转换为UTF-8,导致转换异常!!!");
            }
            byte[] arraySendM = Encoding.UTF8.GetBytes(text);//text.GetBytes("UTF-8");
            if (arraySendM == null)
            {
                throw new Exception("明文转换为UTF-8,导致转换异常!!!");
            }
            if (numBit <= 1)
            {
                throw new Exception("随机数位数不能少于2!!!");
            }
            int numeroByte = (numBit - 1) / 8;

            byte[][]      encodSendM = RSAUtil.byteToEm(arraySendM, numeroByte);
            BigInteger[]  encodingM  = RSAUtil.encodeRSA(encodSendM, e, n);
            StringBuilder encondSm   = new StringBuilder();

            foreach (BigInteger em in encodingM)
            {
                encondSm.Append(em.ToString(16));
                encondSm.Append(" ");
            }
            return(encondSm.ToString());
        }
Ejemplo n.º 2
0
        public static bool validSign(String transdata, String sign, String key)
        {
            /*
             * $trans_data = '{"exorderno":"10004200000001100042","transid":"02113013118562300203","waresid":1,"appid":"20004600000001200046","feetype":0,"money":3000,"count":1,"result":0,"transtype":0,"transtime":"2013-01-31 18:57:27","cpprivate":"123456"}';
             * $key = 'MjhERTEwQkFBRDJBRTRERDhDM0FBNkZBMzNFQ0RFMTFCQTBCQzE3QU1UUTRPRFV6TkRjeU16UTVNRFUyTnpnek9ETXJNVE15T1RRME9EZzROVGsyTVRreU1ETXdNRE0zTnpjd01EazNNekV5T1RJek1qUXlNemN4';
             * $sign = '28adee792782d2f723e17ee1ef877e7 166bc3119507f43b06977786376c0434 633cabdb9ee80044bc8108d2e9b3c86e';
             */
            // transdata = "{\"exorderno\":\"10004200000001100042\",\"transid\":\"02113013118562300203\",\"waresid\":1,\"appid\":\"20004600000001200046\",\"feetype\":0,\"money\":3000,\"count\":1,\"result\":0,\"transtype\":0,\"transtime\":\"2013-01-31 18:57:27\",\"cpprivate\":\"123456\"},\"paytype\":401";
            //  key = "MjhERTEwQkFBRDJBRTRERDhDM0FBNkZBMzNFQ0RFMTFCQTBCQzE3QU1UUTRPRFV6TkRjeU16UTVNRFUyTnpnek9ETXJNVE15T1RRME9EZzROVGsyTVRreU1ETXdNRE0zTnpjd01EazNNekV5T1RJek1qUXlNemN4";
            // sign = "28adee792782d2f723e17ee1ef877e7 166bc3119507f43b06977786376c0434 633cabdb9ee80044bc8108d2e9b3c86e";



            //jsonStr = transdata ={ "exorderno":"YYHPay20160302194522756","transid":"01416030219452647215","waresid":1,"appid":"5000805433","feetype":0,"money":6,"count":1,"result":0,"transtype":0,"transtime":"2016-03-02 19:45:51","cpprivate":"515游戏-60000游戏币","paytype":401}
            //&sign = 7a532a31a1834b57499c4724939f1a16 5c5b1e091f08b714ead4ebf1a9915ae3 2cc8204e3d228da1aea4dace9bc5fdab



            //transdata = "{\"exorderno\":\"YYHPay20160302194522756\",\"transid\":\"01416030219452647215\",\"waresid\":1,\"appid\":\"5000805433\",\"feetype\":0,\"money\":6,\"count\":1,\"result\":0,\"transtype\":0,\"transtime\":\"2016-03-02 19:45:51\",\"cpprivate\":\"515游戏-60000游戏币\",\"paytype\":401}";
            // key = "OEQxODM1M0Q2QjMwNDAzOUYwRDJEMkE4OUVEMjIyMjgwMUU3QzY1RE1UYzJORFkyT0RJMU1UWXdNVGd5TXpnNU16TXJNekU1T0RrNE9ETTRPRGcyT0RnMk5EY3pOVEUyTXprd01UYzBOekV4TnpVMU5UUTRNakU1";
            // sign = "7a532a31a1834b57499c4724939f1a16 5c5b1e091f08b714ead4ebf1a9915ae3 2cc8204e3d228da1aea4dace9bc5fdab";

            try
            {
                MD5    md5    = new MD5CryptoServiceProvider();
                byte[] output = md5.ComputeHash(Encoding.UTF8.GetBytes(transdata.Trim()));
                String md5str = BitConverter.ToString(output).Replace("-", "");

                String decodeBaseStr = Base64.DecodeBase64(key.Trim());

                String[] decodeBaseVec = decodeBaseStr.Replace('+', '#').Split('#');

                String privateKey = decodeBaseVec[0];
                String modkey     = decodeBaseVec[1];

                String reqMd5 = RSAUtil.decrypt(sign.Trim(), new BigInteger(privateKey),
                                                new BigInteger(modkey));

                if ((md5str.ToLower()).Equals(reqMd5.ToLower()))
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception e)
            {
            }

            return(false);
        }
Ejemplo n.º 3
0
        /**
         * 解密算法
         *
         * @param cryptograph
         *            :密文,带","
         * @param d
         *            私钥
         * @param n
         * @param numBit
         *            位数
         * @return
         * @
         */
        public static String decrypt(String cryptograph, BigInteger d,
                                     BigInteger n, int numBit)
        {
            String[] chs = cryptograph.Split(' ');
            if (chs == null || chs.GetLength(0) <= 0)
            {
                throw new Exception("密文不符合要求!!!");
            }
            int numeroToken = chs.GetLength(0);

            BigInteger[] StringToByte = new BigInteger[numeroToken];
            for (int i = 0; i < numeroToken; i++)
            {
                StringToByte[i] = new BigInteger(chs[i], 16);
            }
            byte[][] encodeM     = RSAUtil.dencodeRSA(StringToByte, d, n);
            byte[]   sendMessage = RSAUtil.StringToByte(encodeM);
            //String message = new String(sendMessage, "UTF-8");
            string message = System.Text.Encoding.Default.GetString(sendMessage);
            String result  = System.Web.HttpUtility.UrlDecode(message, Encoding.UTF8);//.UrlDecode.decode(message, "UTF-8");

            return(result);
        }