Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Org.BouncyCastle.Bcpg;
- using Org.BouncyCastle.Bcpg.OpenPgp;
- using Org.BouncyCastle.Crypto;
- using Org.BouncyCastle.Security;
- using Portal.Models;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Web;
- using System.Web.Mvc;
- namespace Portal.Controllers
- {
- //[Authorize]
- public class PagoController : Controller
- {
- // GET: Pago
- public ActionResult Index(string year = "")
- {
- //String acquirerID = "144";
- //String idCommerce = "8022";
- String acquirerID = "29";
- String idCommerce = "7154";
- //Parametros de configuracion para VPOS
- String purchaseAmount = System.Web.HttpUtility.UrlEncode(Encrypt("5000")).Replace("%5cn", "%0A");
- String purchaseCurrencyCode = System.Web.HttpUtility.UrlEncode(Encrypt("604")).Replace("%5cn", "%0A"); //Codigo para nuevos soles
- String operationNumber = System.Web.HttpUtility.UrlEncode(Encrypt("999964")).Replace("%5cn", "%0A"); // numero de operacion debe ser unico x transacc
- //Parametros de configuracion para Wallet
- //String commerce = "262";
- String commerce = "262";
- String cardHolderCommerce = EncryptWallet("48126179");
- String names = EncryptWallet("Gerardo");
- String lastnames = EncryptWallet("Davila Garcia");
- String mail = EncryptWallet("a20101616@pucp.pe");
- //Inicialización del Servicio Web y de parámetros de envío
- ServiceReference2.WalletCommerceClient walletCommerce = new ServiceReference2.WalletCommerceClient();
- String ansDescription = "";
- String codAsoCardHolderWallet = "";
- String registerVerification = "";
- String date = "";
- String hour = "";
- //Consumo del método RegisterCardHolder y recepción del resultado encriptado
- String result1 = walletCommerce.RegisterCardHolder(commerce, cardHolderCommerce, mail, names, lastnames, mail, mail, mail, registerVerification, out ansDescription, out codAsoCardHolderWallet, out date, out hour);
- String txtMensajeEncriptado = result1;
- ViewBag.txtMensajeEncriptado = txtMensajeEncriptado;
- ViewBag.cardHolderCommerce = cardHolderCommerce;
- //Llave Publica de ALIGNET para Wallet
- String publicKey = "-----BEGIN PGP PUBLIC KEY BLOCK-----" + "\n" +
- "Version: BCPG v1.43" + "\n" + "\n" +
- "mQENBFiBPNIBCACiss1r+qQlc6+hn9gGEvp0/ba1XoVYJP30cOoQSgXwE21NmHNt" + "\n" +
- "sjFmGqdZUs/9+Q+BKwt3BjZQZU2Fv3jWWbME40AWgN2cL+K/NWFF7uYp/ljBepT0" + "\n" +
- "UkQm2dUV0mKrgBb8H3E59HXM4rofOLmxNGf+f7vzv7mmitSBLoOB36nLNk6z91lU" + "\n" +
- "MWNjivRC6UJExQbtm2MI7RvXYnG7hocagZYpoITlW52pP9rv/Ce0OFdFiDgPnE9E" + "\n" +
- "qyIdyVwwyQQM7Qfj0S9fqmcxwyE/ww9jQJMbhxi7NPOBc3dlPGnVw+VLFiKtN9kD" + "\n" +
- "drJVH9mSOTrWmfETwqlhOpzOlmn0QYuefz/tABEBAAG0IEFnalJEVE5FZ3JtdVVG" + "\n" +
- "TnN4V0YtNTY0MzMzNzQzNjgyiQEcBBABAgAGBQJYgTzSAAoJEI2j3PozlD+vmPUI" + "\n" +
- "AJ/YIM7QMzPOfoA1eeciQE+oi9n+bc4/BBggSFfxhEbh4QKeyUI+ZLjnNO35I/3r" + "\n" +
- "+2EQ8TMwx23aHqUpEUYs/MCn4C4F3+n4lcBeEFFWdN05VrTkXnDcO+8pbu2+ep68" + "\n" +
- "J7CGR8KcxWrqeQC9kIu5iO5Voxm7hCRc0lDgSzTtBbw9Llyj3McPoSFuSU8FobEQ" + "\n" +
- "NJowKih7zln6JxT1fy1fRL7ZV4bChQre56B08fCcb3qTLSvnWDEEXH3ppuqf18dK" + "\n" +
- "uhMi5JDV1fepCS9GzueFTWjnt67wXnOmORG41VI6jzYzoknBYfHEGEA0zTfHsGgW" + "\n" +
- "OdDTX4IUe5yu/G6SSjk00HU=" + "\n" +
- "=gi3I" + "\n" +
- "-----END PGP PUBLIC KEY BLOCK-----";
- String txtLlavePublica = publicKey;
- //Llave Privada del Comercio para Wallet
- String privateKey = "-----BEGIN PGP PRIVATE KEY BLOCK-----" + "\n" +
- "Version: BCPG v1.43" + "\n" + "\n" +
- "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" + "\n" +
- "DwY1TrBTSEJkCryNb+DYVcRg" + "\n" +
- "=Jcqf" + "\n" +
- "-----END PGP PRIVATE KEY BLOCK-----";
- String txtLlavePrivada = privateKey;
- //Clave Wallet (Verificar)
- //String password = "RPBtNrgQKruEBwEcNd*36689974424";
- String password = "Aelu1234";
- //Recepción, desencriptación e interpretación de los parámetros de respuesta
- Stream messageCryptoStream;
- Byte[] messageCryptoByteArray = Encoding.UTF8.GetBytes(result1);
- messageCryptoStream = new MemoryStream(messageCryptoByteArray);
- Stream privateKeyStream;
- Byte[] privateKeyByteArray = Encoding.UTF8.GetBytes(privateKey);
- privateKeyStream = new MemoryStream(privateKeyByteArray);
- String result = Decrypt(messageCryptoStream, password, privateKeyStream);
- String txtMensajeDesencriptado = result;
- ViewBag.txtMensajeDesencriptado = txtMensajeDesencriptado;
- //Asignacion a la pagina principal
- ViewBag.acquirerID = acquirerID;
- ViewBag.idCommerce = idCommerce;
- ViewBag.purchaseAmount = purchaseAmount;
- ViewBag.purchaseCurrencyCode = purchaseCurrencyCode;
- ViewBag.operationNumber = operationNumber;
- #region pago item
- decimal montoMensualSocio = 200;
- List<PagoItem> pagosGrabados = new List<PagoItem>();
- pagosGrabados.Add(new PagoItem
- {
- mesAPagar = "201701",
- mesAPagarShow = "01/2017",
- montoMensual = 180,
- estadoPago = 1
- });
- year = string.IsNullOrEmpty(year) ? DateTime.Now.Year.ToString() : year;
- Pago pago = new Pago();
- List<PagoItem> pagos = new List<PagoItem>();
- PagoItem item;
- for (var i = 1; i <= 12; i++)
- {
- string dia = i.ToString();
- if (i < 10)
- {
- dia = string.Format("0{0}", dia);
- }
- string mesApagar = string.Format("{0}{1}", year, dia);
- var grabado = pagosGrabados.Where(n => n.mesAPagar == mesApagar).ToList();
- if (grabado.Count > 0)
- {
- var pagado = grabado.FirstOrDefault();
- item = new PagoItem();
- item.mesAPagar = pagado.mesAPagar;
- item.montoMensual = pagado.montoMensual;
- item.estadoPago = 1;
- }
- else
- {
- item = new PagoItem();
- item.mesAPagar = string.Format("{0}{1}", year, dia);
- item.montoMensual = montoMensualSocio;
- item.estadoPago = 0;
- }
- pagos.Add(item);
- }
- #endregion
- pago.items = pagos;
- return View(pago);
- }
- [HttpPost]
- public ActionResult CreateCart(List<PagoItem> pagos)
- {
- try
- {
- SessionItem cart = new SessionItem();
- cart.UserName = User.Identity.Name;
- cart.UserSID = Guid.NewGuid();
- cart.items = pagos;
- HttpContext.Session["cart"] = cart;
- // TODO: Add insert logic here
- //var directorLN = new DirectorLN();
- //directorLN.Insertar(director);
- return RedirectToAction("DetallePago");
- }
- catch (Exception ex)
- {
- return View("Error");
- }
- }
- // GET: Director/Details/5
- public ActionResult DetallePago()
- {
- try
- {
- return View();
- }
- catch (Exception ex)
- {
- return View("Error");
- }
- }
- #region Funciones
- private String EncryptWallet(string input)
- {
- String publicKeyFile;
- PgpPublicKey pubkey;
- Stream keyIn;
- Byte[] encrypted;
- Byte[] original;
- //Llave Publica de ALIGNET para Wallet
- //Llave Publica de ALIGNET para Wallet
- String publicKey = "-----BEGIN PGP PUBLIC KEY BLOCK-----" + "\n" +
- "Version: BCPG v1.43" + "\n" + "\n" +
- "mQENBFiBPNIBCACiss1r+qQlc6+hn9gGEvp0/ba1XoVYJP30cOoQSgXwE21NmHNt" + "\n" +
- "sjFmGqdZUs/9+Q+BKwt3BjZQZU2Fv3jWWbME40AWgN2cL+K/NWFF7uYp/ljBepT0" + "\n" +
- "UkQm2dUV0mKrgBb8H3E59HXM4rofOLmxNGf+f7vzv7mmitSBLoOB36nLNk6z91lU" + "\n" +
- "MWNjivRC6UJExQbtm2MI7RvXYnG7hocagZYpoITlW52pP9rv/Ce0OFdFiDgPnE9E" + "\n" +
- "qyIdyVwwyQQM7Qfj0S9fqmcxwyE/ww9jQJMbhxi7NPOBc3dlPGnVw+VLFiKtN9kD" + "\n" +
- "drJVH9mSOTrWmfETwqlhOpzOlmn0QYuefz/tABEBAAG0IEFnalJEVE5FZ3JtdVVG" + "\n" +
- "TnN4V0YtNTY0MzMzNzQzNjgyiQEcBBABAgAGBQJYgTzSAAoJEI2j3PozlD+vmPUI" + "\n" +
- "AJ/YIM7QMzPOfoA1eeciQE+oi9n+bc4/BBggSFfxhEbh4QKeyUI+ZLjnNO35I/3r" + "\n" +
- "+2EQ8TMwx23aHqUpEUYs/MCn4C4F3+n4lcBeEFFWdN05VrTkXnDcO+8pbu2+ep68" + "\n" +
- "J7CGR8KcxWrqeQC9kIu5iO5Voxm7hCRc0lDgSzTtBbw9Llyj3McPoSFuSU8FobEQ" + "\n" +
- "NJowKih7zln6JxT1fy1fRL7ZV4bChQre56B08fCcb3qTLSvnWDEEXH3ppuqf18dK" + "\n" +
- "uhMi5JDV1fepCS9GzueFTWjnt67wXnOmORG41VI6jzYzoknBYfHEGEA0zTfHsGgW" + "\n" +
- "OdDTX4IUe5yu/G6SSjk00HU=" + "\n" +
- "=gi3I" + "\n" +
- "-----END PGP PUBLIC KEY BLOCK-----";
- Byte[] byteArray = Encoding.UTF8.GetBytes(publicKey);
- keyIn = new MemoryStream(byteArray);
- pubkey = ReadPublicKey(keyIn);
- original = Encoding.ASCII.GetBytes(input);
- encrypted = Encrypt(original, pubkey);
- return Encoding.ASCII.GetString(encrypted);
- }
- public String Decrypt(Stream input, String password, Stream privateKeyPath)
- {
- input = PgpUtilities.GetDecoderStream(input);
- PgpObjectFactory pgpObjF = new PgpObjectFactory(input);
- PgpEncryptedDataList enc;
- PgpObject obj = pgpObjF.NextPgpObject();
- if (obj is PgpEncryptedDataList)
- enc = (PgpEncryptedDataList)obj;
- else
- enc = (PgpEncryptedDataList)pgpObjF.NextPgpObject();
- //AsymmetricKeyParameter akp = new AsymmetricKeyParameter(true);
- PgpPrivateKey privKey = GetPrivateKey(privateKeyPath, password); // esto esta bien
- PgpPublicKeyEncryptedData pbe = enc.GetEncryptedDataObjects().Cast<PgpPublicKeyEncryptedData>().First();
- Stream clear;
- clear = pbe.GetDataStream(privKey);
- PgpObjectFactory plainFact = new PgpObjectFactory(clear);
- PgpObject message = plainFact.NextPgpObject();
- if ((message is PgpCompressedData))
- {
- PgpCompressedData cData = (PgpCompressedData)message;
- Stream compDataIn = cData.GetDataStream();
- PgpObjectFactory o = new PgpObjectFactory(compDataIn);
- message = o.NextPgpObject();
- if ((message is PgpOnePassSignatureList))
- {
- message = o.NextPgpObject();
- PgpLiteralData Ld = null;
- Ld = (PgpLiteralData)message;
- Stream unc = Ld.GetInputStream();
- StreamReader reader = new StreamReader(unc);
- return reader.ReadToEnd();
- }
- else
- {
- PgpLiteralData Ld = null;
- Ld = (PgpLiteralData)message;
- Stream unc = Ld.GetInputStream();
- StreamReader reader = new StreamReader(unc);
- return reader.ReadToEnd();
- }
- }
- return null;
- }
- //Función para obtener la llave privada del comercio
- private static PgpPrivateKey GetPrivateKey(Stream privateKeyPath, String password)
- {
- using (Stream inputStream = PgpUtilities.GetDecoderStream(privateKeyPath))
- {
- PgpSecretKeyRingBundle secretKeyRingBundle = new PgpSecretKeyRingBundle(inputStream);
- foreach (PgpSecretKeyRing kRing in secretKeyRingBundle.GetKeyRings())
- {
- foreach (PgpSecretKey secretKey in kRing.GetSecretKeys())
- {
- PgpPrivateKey privKey = secretKey.ExtractPrivateKey(password.ToCharArray());
- if (object.ReferenceEquals(privKey.Key.GetType(), typeof(Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters)))
- {
- return privKey;
- }
- }
- }
- }
- return null;
- }
- private String Encrypt(string input)
- {
- String publicKeyFile;
- PgpPublicKey pubKey;
- Stream keyIn;
- Byte[] encrypted;
- Byte[] original;
- //llave publica alignet pasarela
- String publicKey = "-----BEGIN PGP PUBLIC KEY BLOCK-----" + "\n" +
- "Version: BCPG v1.43" + "\n" + "\n" +
- "mQENBFiBPNIBCACrfI9WOFybUhQt7SmXT/XzeP16Lhat1nMCw1zS4g4vuYUKQLPg" + "\n" +
- "bv/DngXDa0+PD3RKpqs5Dv/8bIBMSrqQcpAC2BomD0/S1HrVWEwsZ5gpXhwfXUAF" + "\n" +
- "M8vHx7m7YZpnmIPKZ9DHrniZFabXHuc6GUsUL6MY1+0W41C5XtC4gViFDKTSM2Xb" + "\n" +
- "ewnsFqy7l7we+r3ikhGWhdVoO6sRrn7ULa/BPx37DThAQ5y6gL66kcoRJGIbKgtg" + "\n" +
- "moUXhTWACYMT45aonnk4/SRkMNgODByd9x8dCbe0nuprs27/dI+FcAg1LM0h20Cv" + "\n" +
- "e9ClNhDn1lTKN1sJlwTzlMtL79/sv4LhCYrvABEBAAG0GG1kRmJ0amNqWmNyRUdz" + "\n" +
- "eUA1OTQ1NTQ4NYkBHAQQAQIABgUCWIE80gAKCRBwMNEclo7Y0zfPCACi9KFg2wf3" + "\n" +
- "TgH2rrkHyJD4Bz6wTH4Ybm624yOf/A0lEiaApqvE98+Dlb7MTjTPVZQKZ2KrK4Xu" + "\n" +
- "u0s6TGipDEvA5PNtnZl1rsol+0Ayt6G5tvT6x7PEJmb8GKEZhmsu/XO1qlqlF2S3" + "\n" +
- "/TJJ4Lvv0eMaBZFAs4mjDm6FWaStWCrH9i+fRY0QEqVn1dt48apcMuFyAMgn+DVW" + "\n" +
- "nmkYPNa9+EWfBR9rfQXN8uMI56zBUVZd7POLCzdJ25Y1mHucqBx7TapfqGyexHHa" + "\n" +
- "06khpupLNehw5QsRdM+p61Xn6BCxk2R7cosXl65+yqOfNJHr0Be5kHnQDgaAoZO2" + "\n" +
- "7RF9uzzE6onL" + "\n" +
- "=SzQd" + "\n" +
- "-----END PGP PUBLIC KEY BLOCK-----";
- // System.Diagnostics.Debug.WriteLine(publicKey);
- Byte[] byteArray = Encoding.UTF8.GetBytes(publicKey);
- keyIn = new MemoryStream(byteArray);
- pubKey = ReadPublicKey(keyIn);
- System.Diagnostics.Debug.WriteLine("BABY COMEBAAAAAAAAAACK");
- if (pubKey == null) System.Diagnostics.Debug.WriteLine("NUULL CARAJOO");
- else System.Diagnostics.Debug.WriteLine("NO SOY NULL NO SOY NULL ZI");
- original = Encoding.ASCII.GetBytes(input);
- encrypted = Encrypt(original, pubKey);
- return Encoding.ASCII.GetString(encrypted);
- }
- private byte[] Encrypt(byte[] clearData, PgpPublicKey encKey)
- {
- Boolean armor = true;
- String filename = PgpLiteralData.Console;
- MemoryStream bOut = new MemoryStream();
- Byte[] bytes; //= new byte[16 * 1024];// mi variable
- PgpCompressedDataGenerator comData = new PgpCompressedDataGenerator(Org.BouncyCastle.Bcpg.CompressionAlgorithmTag.Zip);
- Stream cos = comData.Open(bOut);
- PgpLiteralDataGenerator lData = new PgpLiteralDataGenerator();
- Stream pOut = lData.Open(cos, PgpLiteralData.Binary, filename, clearData.Length, DateTime.UtcNow);
- pOut.Write(clearData, 0, clearData.Length);
- lData.Close();
- comData.Close();
- PgpEncryptedDataGenerator cPk = new PgpEncryptedDataGenerator(SymmetricKeyAlgorithmTag.Cast5, new SecureRandom());
- cPk.AddMethod(encKey);
- bytes = bOut.ToArray();
- MemoryStream encOut = new MemoryStream();
- Stream os = encOut;
- if (armor)
- {
- os = new ArmoredOutputStream(os);
- }
- Stream cOut = cPk.Open(os, bytes.Length);
- cOut.Write(bytes, 0, bytes.Length);
- cOut.Close();
- if (armor)
- {
- os.Close();
- }
- encOut.Close();
- return encOut.ToArray();
- }
- private PgpPublicKey ReadPublicKey(Stream inputStream)
- {
- inputStream = PgpUtilities.GetDecoderStream(inputStream);
- PgpPublicKeyRingBundle pgpPub = new PgpPublicKeyRingBundle(inputStream);
- foreach (PgpPublicKeyRing kRing in pgpPub.GetKeyRings())
- {
- foreach (PgpPublicKey k in kRing.GetPublicKeys())
- {
- if (k.IsEncryptionKey) return k;
- }
- }
- //return null;
- throw new ArgumentException("No se puede encontrar la llave encriptada en key ring amix");
- }
- #endregion Funciones
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement