import java.io.FileInputStream;
import java.io.PrintStream;
import java.security.KeyFactory;
import java.security.Signature;
import java.security.spec.X509EncodedKeySpec;
import javax.servlet.http.HttpServletRequest;string pkFile = "属于一个文件publickeys";  
public static boolean validateResponse(HttpServletRequest request, String pkFile)
    {
        String queryString = request.getQueryString();
        int i = queryString.indexOf("&Signature");
        String data1 = queryString.substring(0, i);
        String data = URLUTF8Encoder.decode(data1);
        String signature = request.getParameter("Signature");
        return UnSigData(data, pkFile, signature);
    }public static boolean UnSigData(String data, String pubkey, String signature)
    {
        boolean verifies = false;
        try
        {
            char encodedSigData[] = signature.toCharArray();
            byte sigToVerify[] = Base64.decode(encodedSigData);
            FileInputStream pkfile = new FileInputStream(pubkey);
            byte encKey[] = new byte[pkfile.available()];
            pkfile.read(encKey);
            pkfile.close();
            X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            java.security.PublicKey pubKey = keyFactory.generatePublic(pubKeySpec);
            Signature sig = Signature.getInstance("MD5withRSA");
            sig.initVerify(pubKey);
            byte buffer[] = data.getBytes();
            sig.update(buffer);
            verifies = sig.verify(sigToVerify);
        }
        catch(Exception e)
        {
            System.out.println(e.toString());
        }
        return verifies;
    }

解决方案 »

  1.   

    楼上
    我主要是对java这个东东不太了解
    你帮忙给转化一下?
    \主要是第二个函数:UnSigData的加密码那块不知对应NET的那个.
      

  2.   

    写代码没有这样改的
    java的包和.net的命名空间几乎都不一样,想改太烦...做这样的修改,那就是看懂那段java代码实现了什么功能,然后再用.net来实现
      

  3.   

    .net中 System.Security命名空间是进行RSA加密的....
      

  4.   

    public   static   boolean   UnSigData(String   data,   String   pubkey,   String   signature) 
            { 
                    boolean   verifies   =   false; 
                    try 
                    { 
                            // .net中string 可以当成char[] 处理,所以着句可以不用
                            char   encodedSigData[]   =   signature.toCharArray(); 
                            // 这句是编码 就是说encodedSigData[] 转换为base64编码的字节数组。 可以查一下msdn
                            byte   sigToVerify[]   =   Base64.decode(encodedSigData); 
                            // 流,没什么好说的
                            FileInputStream   pkfile   =   new   FileInputStream(pubkey); 
                            byte   encKey[]   =   new   byte[pkfile.available()]; 
                            pkfile.read(encKey); 
                            pkfile.close(); 
                            // 流到这里结束
                            
                                // System.Security 可以在这个空间下找到类似的RSA加密类 java的加密细节 你可以不关的,直接转成.net的
                                // msdn里有详细的例子 找一下,依葫芦画瓢
                            X509EncodedKeySpec   pubKeySpec   =   new   X509EncodedKeySpec(encKey); 
                            KeyFactory   keyFactory   =   KeyFactory.getInstance("RSA"); 
                            java.security.PublicKey   pubKey   =   keyFactory.generatePublic(pubKeySpec); 
                            Signature   sig   =   Signature.getInstance("MD5withRSA"); 
                            sig.initVerify(pubKey); 
                            byte   buffer[]   =   data.getBytes(); 
                            sig.update(buffer); 
                            verifies   =   sig.verify(sigToVerify); 
                    } 
                    catch(Exception   e) 
                    { 
                            System.out.println(e.toString()); 
                    } 
                    return   verifies; 
            }
      

  5.   

     System.Security   可以在这个空间下找到类似的RSA加密类那个类相似,指教一下
      

  6.   

    有人帮忙转一下吗.对方就给了一个uapublic的钥匙,但我看加密时需要对
    bb.Modulus = 
    bb.Exponent =
    这两个值赋值.肯请各位帮忙写一下