解密加密文本(Decrypt an encrypted text)
我在Windows窗体应用程序中有一个文本框和一个“解密”按钮,我在其中放入一个加密字符串并尝试解密但问题是这样。 首先,我从这个网站上的一个人那里得到了这个名为
DataEncryptor
类代码:public class DataEncryptor { TripleDESCryptoServiceProvider symm; #region Factory public DataEncryptor() { this.symm = new TripleDESCryptoServiceProvider(); this.symm.Padding = PaddingMode.PKCS7; } public DataEncryptor(TripleDESCryptoServiceProvider keys) { this.symm = keys; } public DataEncryptor(byte[] key, byte[] iv) { this.symm = new TripleDESCryptoServiceProvider(); this.symm.Padding = PaddingMode.PKCS7; this.symm.Key = key; this.symm.IV = iv; } #endregion #region Properties public TripleDESCryptoServiceProvider Algorithm { get { return symm; } set { symm = value; } } public byte[] Key { get { return symm.Key; } set { symm.Key = value; } } public byte[] IV { get { return symm.IV; } set { symm.IV = value; } } #endregion #region Crypto public byte[] Encrypt(byte[] data) { return Encrypt(data, data.Length); } public byte[] Encrypt(byte[] data, int length) { try { // Create a MemoryStream. var ms = new MemoryStream(); // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). var cs = new CryptoStream(ms, symm.CreateEncryptor(symm.Key, symm.IV), CryptoStreamMode.Write); // Write the byte array to the crypto stream and flush it. cs.Write(data, 0, length); cs.FlushFinalBlock(); // Get an array of bytes from the // MemoryStream that holds the // encrypted data. byte[] ret = ms.ToArray(); // Close the streams. cs.Close(); ms.Close(); // Return the encrypted buffer. return ret; } catch (CryptographicException ex) { Console.WriteLine("A cryptographic error occured: {0}", ex.Message); } return null; } public string EncryptString(string text) { return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(text))); } public byte[] Decrypt(byte[] data) { return Decrypt(data, data.Length); } public byte[] Decrypt(byte[] data, int length) { try { // Create a new MemoryStream using the passed // array of encrypted data. MemoryStream ms = new MemoryStream(data); // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). CryptoStream cs = new CryptoStream(ms, symm.CreateDecryptor(symm.Key, symm.IV), CryptoStreamMode.Read); // Create buffer to hold the decrypted data. byte[] result = new byte[length]; // Read the decrypted data out of the crypto stream // and place it into the temporary buffer. cs.Read(result, 0, result.Length); return result; } catch (CryptographicException ex) { Console.WriteLine("A cryptographic error occured: {0}", ex.Message); } return null; } public string DecryptString(string data) { return Encoding.UTF8.GetString(Decrypt(Convert.FromBase64String(data))).TrimEnd('\0'); } #endregion }
他给出了它的用法:
string message="A very secret message here."; DataEncryptor keys=new DataEncryptor(); string encr=keys.EncryptString(message); // later string actual=keys.DecryptString(encr);
我复制了他的代码,并在加密和解密工作:
//my code private void proceedED(string data) { DataEncryptor key = new DataEncryptor(); string encr = key.EncryptString(data); string actual = key.DecryptString(encr); encryptedLabel.Text = encr; decryptedLabel.Text = actual; }
然后我创建了一个这样的方法:
private void proceedDecrypt(string data) { DataEncryptor key = new DataEncryptor(); string decr = key.DecryptString(data); decryptedData.Text = decr; }
问题是,当我提交时它崩溃了,我不知道为什么。 我认为它应该是一个真正的加密字符串,因为它只是一个普通的字符串。 我该如何解决?
I got a textbox and a 'decrypt' button in my Windows Form Application where I put an encrypted string in there and try to decrypt it but the problem is this. First, I got this class code called
DataEncryptor
from a guy on this website:public class DataEncryptor { TripleDESCryptoServiceProvider symm; #region Factory public DataEncryptor() { this.symm = new TripleDESCryptoServiceProvider(); this.symm.Padding = PaddingMode.PKCS7; } public DataEncryptor(TripleDESCryptoServiceProvider keys) { this.symm = keys; } public DataEncryptor(byte[] key, byte[] iv) { this.symm = new TripleDESCryptoServiceProvider(); this.symm.Padding = PaddingMode.PKCS7; this.symm.Key = key; this.symm.IV = iv; } #endregion #region Properties public TripleDESCryptoServiceProvider Algorithm { get { return symm; } set { symm = value; } } public byte[] Key { get { return symm.Key; } set { symm.Key = value; } } public byte[] IV { get { return symm.IV; } set { symm.IV = value; } } #endregion #region Crypto public byte[] Encrypt(byte[] data) { return Encrypt(data, data.Length); } public byte[] Encrypt(byte[] data, int length) { try { // Create a MemoryStream. var ms = new MemoryStream(); // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). var cs = new CryptoStream(ms, symm.CreateEncryptor(symm.Key, symm.IV), CryptoStreamMode.Write); // Write the byte array to the crypto stream and flush it. cs.Write(data, 0, length); cs.FlushFinalBlock(); // Get an array of bytes from the // MemoryStream that holds the // encrypted data. byte[] ret = ms.ToArray(); // Close the streams. cs.Close(); ms.Close(); // Return the encrypted buffer. return ret; } catch (CryptographicException ex) { Console.WriteLine("A cryptographic error occured: {0}", ex.Message); } return null; } public string EncryptString(string text) { return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(text))); } public byte[] Decrypt(byte[] data) { return Decrypt(data, data.Length); } public byte[] Decrypt(byte[] data, int length) { try { // Create a new MemoryStream using the passed // array of encrypted data. MemoryStream ms = new MemoryStream(data); // Create a CryptoStream using the MemoryStream // and the passed key and initialization vector (IV). CryptoStream cs = new CryptoStream(ms, symm.CreateDecryptor(symm.Key, symm.IV), CryptoStreamMode.Read); // Create buffer to hold the decrypted data. byte[] result = new byte[length]; // Read the decrypted data out of the crypto stream // and place it into the temporary buffer. cs.Read(result, 0, result.Length); return result; } catch (CryptographicException ex) { Console.WriteLine("A cryptographic error occured: {0}", ex.Message); } return null; } public string DecryptString(string data) { return Encoding.UTF8.GetString(Decrypt(Convert.FromBase64String(data))).TrimEnd('\0'); } #endregion }
And he gave the usage of it:
string message="A very secret message here."; DataEncryptor keys=new DataEncryptor(); string encr=keys.EncryptString(message); // later string actual=keys.DecryptString(encr);
I copied his code and works at encrypting and decrypting:
//my code private void proceedED(string data) { DataEncryptor key = new DataEncryptor(); string encr = key.EncryptString(data); string actual = key.DecryptString(encr); encryptedLabel.Text = encr; decryptedLabel.Text = actual; }
Then I created a method like this:
private void proceedDecrypt(string data) { DataEncryptor key = new DataEncryptor(); string decr = key.DecryptString(data); decryptedData.Text = decr; }
The problem is that it crashes when I submit and I don't know why. I think it should be a true encrypted string because it's just a normal string. How do I fix this?
原文:https://stackoverflow.com/questions/30795328
最满意答案
尝试这样的事情:
$customer = \Stripe\Customer::retrieve($customerID); $cardID = $customer->default_source; if(isset($cardID)){ echo $cardID; } else { echo "No card"; //Code for entering card info.. }
在那里你将获得卡ID,然后你可以简单地检查你是否得到了什么。 如果客户有一张卡,那么你会获得卡ID,如果客户没有卡,你将无法获得任何卡。
Try something like this:
$customer = \Stripe\Customer::retrieve($customerID); $cardID = $customer->default_source; if(isset($cardID)){ echo $cardID; } else { echo "No card"; //Code for entering card info.. }
There you will get the card id, and then you can simply check if you get something. If customer have a card then you get card id, if costumer does not have a card you won't get anything.
相关问答
更多-
因此,这里的想法是使用Card对象或Token对象上的fingerprint ,而不是id本身,因为如果多次添加相同的卡,这些fingerprint将会不同。 当你得到一个新的卡片令牌时,你可以通过Retrieve Token API检索它,并在card哈希中查找fingerprint 。 您将保留数据库中与特定客户和/或卡关联的已知指纹列表,以便您可以检测到重复的卡片。 注意:确保您使用密钥来获取这些信息。 否则,如果您使用可发布密钥,则可能无法获得指纹值。 So the idea here would ...
-
你不能。 该网站不提供有关该卡的所有信息,因为这是不必要的,并构成诈骗威胁。 在API文档中,我们将找到共享信息的示例。 "source": { "id": "card_1BLoXK2eZvKYlo2CUZoDPXh1", "object": "card", "address_city": null, "address_country": null, "address_line1": null, "address_line1_check": null, "address_line2": null, "add ...
-
尝试这样的事情: $customer = \Stripe\Customer::retrieve($customerID); $cardID = $customer->default_source; if(isset($cardID)){ echo $cardID; } else { echo "No card"; //Code for entering card info.. } 在那里你将获得卡ID,然后你可以简单地检查你是否得到了什么。 如果客户有一张卡,那么你会获得卡ID, ...
-
客户可以拥有多张卡,因此$customer->sources->data是一个数组(因为您应该可以从该属性值的方括号中看出)。 因此,您需要为其编制索引。 print_r($customer->sources->data[0]->id); 如果客户已经保存了多张信用卡,您应该循环使用它: foreach ($customer->sources->data as $card) { print_r($card->id); } A customer can have multiple cards, s ...
-
您无需保存access_token和refresh_token ,只stripe_user_id包含连接的帐户ID的stripe_user_id与Connect配合使用。 您可以针对所有请求使用您平台的秘密API密钥,并将共享客户文档中显示的已连接帐户ID传递到条带帐户标头。 更一般地说,这个头文件可以添加到几乎每个API请求中,以使它指向一个连接的帐户: https://stripe.com/docs/connect/authentication#authentication-via-the-stripe ...
-
因此Stripe Checkout用于标记卡片,而不用管理已经标记并连接到客户的卡片。 您需要构建某种用户界面来执行此操作。 但是,您可以通过使用下面详细介绍的创建充电API端点来为这些卡充电: https://stripe.com/docs/api#create_charge 只需分别提供与客户ID和卡ID相同的customer和source参数。 希望有所帮助! So Stripe Checkout is for tokenizing cards, not managing cards that hav ...
-
几天前我遇到了这个问题而且我已经设法使用这样的json_encode() API来解决它(需要将此导出为我身边的AJAX返回)。 $cards = \Stripe\Customer::retrieve($_SESSION['stripe_customer_id'])->sources->all(array("object" => "card")); $list = json_encode($cards->data); echo($list); 希望这可以帮助。 顺便说一句:您的响应看起来与var_dump ...
-
您可能还想查看此SO答案如何在Stripe(Rails)中创建费用和客户,以获取有关在Rails应用程序中使用Stripe的更多详细信息。 对于Ruby文档,您可以在Stripe Ruby API上找到很好的示例。 在Stripe术语中,卡被称为客户的source 。 您可以从token创建source ,但是一旦创建了source ,您就可以处理Customer对象上的source和default_source元素,并从客户的source检索card对象。 另请注意,除了创建source (或一次性费用) ...
-
在PHP中为Stripe Customer对象添加名称,地址,城市等(Add name, address, city, etc to Stripe Customer object in PHP)[2023-12-07]
由于您正在创建客户对象,因此根据您要存储的内容的描述,它似乎并不重要。 Stripe不会对物理商品进行任何实现,因此他们在客户对象上提供的存储主要是为了您的利益。 因此,当您访问客户对象(通过类似cus_8Dmu7vi6wah58z的ID)时,它应返回所有发货信息和元数据。 发货散列中有一个专用名称字段 ,但它不会从姓氏中抽出名字。 如果这是您真正想要的东西,那么将其存储在元数据字段中可能会更容易。 您还可以注意,将“送货”信息存储在送货哈希中可能会有所帮助,并将“开票”信息存储在元数据哈希中。 Since ... -
使用Stripe添加卡有两种方法。 1)使用卡令牌。 如果你有一个令牌,就像你一样,你不需要任何其他东西,所以你可以做到 customer.cards.create({ :card => current_user.stripe_card_token }) 2)你也可以这样做: customer.cards.create({ :card => { :number => params[:user][:scardnumber], :exp_month => params[:user] ...