Verificación de PIN - Foro de Consultas - Seguridad
Foros de consultas y discusión
Verificación de PIN
Nicolás Balparda, modificado hace 6 años.
Verificación de PIN
Youngling Mensajes: 5 Fecha de incorporación: 26/12/17 Mensajes recientes
00
Buenas, ¿cómo están?
Estoy intentando verificar el PIN de la cédula electrónica, pero cada vez que mando el comando me retorna 6D00 - como si la instrucción no se entendiera. Estoy haciendo la misma prueba que está en el sitio.
¿Alguna idea?
Saludos,
Nicolás
Estoy intentando verificar el PIN de la cédula electrónica, pero cada vez que mando el comando me retorna 6D00 - como si la instrucción no se entendiera. Estoy haciendo la misma prueba que está en el sitio.
¿Alguna idea?
Saludos,
Nicolás
Francisco Perdomo, modificado hace 6 años.
RE: Verificación de PIN
Padawan Mensajes: 36 Fecha de incorporación: 27/03/17 Mensajes recientes
00
Buenas Nicolás,
Te animás a darnos mas contexto para ver como atacar el problema?
En qué ambiente estás? Que código estás usando? Que línea es en la que termina fallando?
Alguno dato más que pueda ser relevante.
Estamos a las órdenes, trataremos de responder lo más pronto posible
Francisco
Te animás a darnos mas contexto para ver como atacar el problema?
En qué ambiente estás? Que código estás usando? Que línea es en la que termina fallando?
Alguno dato más que pueda ser relevante.
Estamos a las órdenes, trataremos de responder lo más pronto posible
Francisco
Nicolás Balparda, modificado hace 6 años.
RE: Verificación de PIN
Youngling Mensajes: 5 Fecha de incorporación: 26/12/17 Mensajes recientes
00
Francisco, ¿cómo estás?
Estoy desde Visual Studio (C#). Mi código es el siguiente. La respuesta en la variable vRespuestaHEXA es la que digo que me devuelve 6D00. Estoy haciendo pruebas conceptuales para luego generar el módulo, pero no logro que esto me funcione bien. La extracción de los datos filiatorios, número de cédula y la imagen la logro sin inconveniente.
Saludos & gracias,
public static bool ValidarPIN(int pPIN)
{
bool vResultado = false;
SCardContext vSCardContext = ComandosAPDU.IniciarConexion();
SCardReader vSCardReader = ConectarADispositivo(vSCardContext);
byte[] vComandoTemporal = new byte[] { 0x00, 0x20, 0x00, 0x11, 0x0C };
byte[] vComandoPIN = new byte[12];
char[] vPINChar = pPIN.ToString().ToCharArray();
byte[] vConvertido = new byte[vPINChar.Length];
for (int i = 0; i < vPINChar.Length; i++)
{
vConvertido = (byte)vPINChar;
}
byte vCero = 0;
for (int i = 0; i < vComandoPIN.Length; i++)
{
vComandoPIN = vConvertido.Length <= i ? vCero : vConvertido;
}
byte[] vComando = new byte[vComandoTemporal.Length + vComandoPIN.Length];
System.Buffer.BlockCopy(vComandoTemporal, 0, vComando, 0, vComandoTemporal.Length);
System.Buffer.BlockCopy(vComandoPIN, 0, vComando, vComandoTemporal.Length, vComandoPIN.Length);
byte[] vRespuesta = Transmitir(vSCardReader, vComando, true, true);
string vRespuestaHEXA = Utils.byteArrayToHex(vRespuesta);
vComando = new byte[] { 0x00, 0x20, 0x00, 0x11, 0x00 };
vRespuesta = Transmitir(vSCardReader, vComando, true, true);
LiberarConexion(vSCardContext);
return vResultado;
}
Estoy desde Visual Studio (C#). Mi código es el siguiente. La respuesta en la variable vRespuestaHEXA es la que digo que me devuelve 6D00. Estoy haciendo pruebas conceptuales para luego generar el módulo, pero no logro que esto me funcione bien. La extracción de los datos filiatorios, número de cédula y la imagen la logro sin inconveniente.
Saludos & gracias,
public static bool ValidarPIN(int pPIN)
{
bool vResultado = false;
SCardContext vSCardContext = ComandosAPDU.IniciarConexion();
SCardReader vSCardReader = ConectarADispositivo(vSCardContext);
byte[] vComandoTemporal = new byte[] { 0x00, 0x20, 0x00, 0x11, 0x0C };
byte[] vComandoPIN = new byte[12];
char[] vPINChar = pPIN.ToString().ToCharArray();
byte[] vConvertido = new byte[vPINChar.Length];
for (int i = 0; i < vPINChar.Length; i++)
{
vConvertido = (byte)vPINChar;
}
byte vCero = 0;
for (int i = 0; i < vComandoPIN.Length; i++)
{
vComandoPIN = vConvertido.Length <= i ? vCero : vConvertido;
}
byte[] vComando = new byte[vComandoTemporal.Length + vComandoPIN.Length];
System.Buffer.BlockCopy(vComandoTemporal, 0, vComando, 0, vComandoTemporal.Length);
System.Buffer.BlockCopy(vComandoPIN, 0, vComando, vComandoTemporal.Length, vComandoPIN.Length);
byte[] vRespuesta = Transmitir(vSCardReader, vComando, true, true);
string vRespuestaHEXA = Utils.byteArrayToHex(vRespuesta);
vComando = new byte[] { 0x00, 0x20, 0x00, 0x11, 0x00 };
vRespuesta = Transmitir(vSCardReader, vComando, true, true);
LiberarConexion(vSCardContext);
return vResultado;
}
Francisco Perdomo, modificado hace 6 años.
RE: Verificación de PIN
Padawan Mensajes: 36 Fecha de incorporación: 27/03/17 Mensajes recientes
00
byte[] vComandoTemporal = new byte[] { 0x00, 0x20, 0x00, 0x11, 0x0C };
Te paso el código que tenemos de verificar PIN:
private static boolean verifyPIN(CardChannel channel) throws CardException, FileNotFoundException, UnsupportedEncodingException { | |
String CLASS = "00"; | |
String INSTRUCTION = "20"; | |
String PARAM1 = "00"; | |
String PARAM2 = "11"; | |
String dataIN = PIN_ASCII; // 1234 | |
// Aparentemente el Reference PIN es de 12 bytes de largo, | |
// por lo que el DATA tiene que ser siempre de 12 bytes. | |
// se pone con padding de ceros para completar 12. | |
// Los caracteres van codificados en ascii, hay que ver si se hace | |
// enforcement de eso | |
byte CLASSbyte = Utils.hexStringToByteArray(CLASS)[0]; | |
byte INSbyte = Utils.hexStringToByteArray(INSTRUCTION)[0]; | |
byte P1byte = Utils.hexStringToByteArray(PARAM1)[0]; | |
byte P2byte = Utils.hexStringToByteArray(PARAM2)[0]; | |
ResponseAPDU r = Utils.sendCommand(channel, CLASSbyte, INSbyte, P1byte, P2byte, Utils.hexStringToByteArray(dataIN), 0); | |
System.out.println(r.getSW1()+""+r.getSW2()); | |
return (r.getSW1() == (int) 0x90 && r.getSW2() == (int) 0x00); | |
// El SW 6A80 indica error de codificacion, es decir, en los TLV | |
// El SW 63Cx indica error de match y que quedan x intentos | |
// 9000 es SW de exito | |
} |
Comparaste lo que tienes con nuestro código? Está en java pero capaz que puedes ver alguna diferencia (y está bastante bien documentado) https://github.com/eIDuy/apdu-services
2.5.0.0
Francisco Perdomo, modificado hace 6 años.
RE: Verificación de PIN
Padawan Mensajes: 36 Fecha de incorporación: 27/03/17 Mensajes recientes
00
Por las dudas tambien te consulto: antes de que se corra ese código está seleccionado el IAS?
2.5.0.0
2.5.0.0
Nicolás Balparda, modificado hace 6 años.
RE: Verificación de PIN
Youngling Mensajes: 5 Fecha de incorporación: 26/12/17 Mensajes recientes
00
Francisco, ¿cómo estás?
Me estaba faltando el IAS (mala mía ).
¡Gracias por tu ayuda!
Saludos,
Nicolás
Me estaba faltando el IAS (mala mía ).
¡Gracias por tu ayuda!
Saludos,
Nicolás