• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

burncd

Segurança da Informação, RSAPublicKey de Java para C#.Net

4 mensagens neste tópico

Boa Noite pessoal.

Encontrei o vosso forum de programação e pareceu-me o mais indicado apara colocar a minha duvida.

Estou a desenvolver uma aplicação de cliente servidor, em que o servidor encontra-se em C#.Net e o cliente em java, e o objectivo é a troca de Chaves publicas dos algoritmos para depois estabelecer uma ligação segura entre ambos para realizar troca de comandos.

A parte de enviar comandos do cliente para o servidor encontra-se feita e a funcionar a 100%. O problema vem quando é para realizar a troca de chaves publicas dos algoritmo RSA entre ambos.

Consigo enviar a stream com as chaves para ambos os lados, e parece-me que ambas estão feitas de forma correcta. Mas o servidor quando tento criar o algoritmo rsa a partir de uma XmlString diz-me o seguinte erro:

(protocol.GetStringFromData())

“The input is not a valid base-64 string as it contains a non-base 64 character, more the 2 padding characters, or a non-white space character among the padding characters.”

O conteúdo que o servidor está a receber é o seguinte:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><RSAKeyvalue><Modulus>AIKTJ+GUABnqQ422G7nmMdVyy38smuWFzrwlZ3mmdg5nqNeDPp76Vst/yNiddLc4Xpsi2AqbyKTm&#13;

+RfOEDER2up05p6EVMluwg26io5/4IeVzZhWXff9BKHmY0YmmQqsN9uuJYch7Jy6pbGuY7k6B+uF&#13;

i1xRIGoJ1zmobibslF8f</Modulus><Exponent>AQAB</Exponent></RSAKeyvalue>

O codigo gerado a partir das seguintes instruções em Java:

        public static String getRSAPublicKeyAsXMLString(RSAPublicKey key) throws
            UnsupportedEncodingException,
            ParserConfigurationException,
            TransformerException,
            SAXException,
            IOException {
        Document xml = getRSAPublicKeyAsXML(key);
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        StringWriter sw = new StringWriter();
        transformer.transform(new DOMSource(xml), new StreamResult(sw));
        return sw.getBuffer().toString();
    }

    public static Document getRSAPublicKeyAsXML(RSAPublicKey key) throws ParserConfigurationException, SAXException, IOException {
        Document result = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();

        Element rsaKeyValue = result.createElement("RSAKeyvalue");
        result.appendChild(rsaKeyValue);

        Element modulus = result.createElement("Modulus");
        rsaKeyValue.appendChild(modulus);

        byte[] modulusBytes = key.getModulus().toByteArray();
        //modulusBytes = stripLeadingZeros(modulusBytes);
        System.out.println("Modulus: " + new String(modulusBytes));
        modulus.appendChild(result.createTextNode(new String(new sun.misc.BASE64Encoder().encode(modulusBytes))));


        Element exponent = result.createElement("Exponent");
        rsaKeyValue.appendChild(exponent);
        byte[] exponentBytes = key.getPublicExponent().toByteArray();
        //exponentBytes = stripLeadingZeros(exponentBytes);
        System.out.println("Exponent: " + new String(exponentBytes));

        exponent.appendChild(result.createTextNode(new String(new sun.misc.BASE64Encoder().encode(exponentBytes))));

        return result;
    }

Não consigo obter o algoritmo do lado do servidor para poder continuar com a resolução do problema. Será que me podiam ajudar?

Desculpem se alguma informação está mal explicada.

Obrigado pela atenção,

Burncd

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código não é muito necessário, pois a diferença está em em vez de criar o XML do lado do java, basta enviar os dados do da chave publica em BASE64Encoder(), ou seja, enviar o Modulus e a Exponent a parte para o .NET e criar o XML do lado do .NET.

Mas se quiserem posso postar mais tarde o código, pois ainda não o tenho funcional mas foi assim que um dos meus colegas de trabalho conseguiu.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora