我在解密时遇到问题,当前输出返回一个字节数组,但是当我尝试通过base64,UTF8,Ascii或Unicode将其转换为字符串时,该字符串只是乱码,创建了私有和公共使用openssl并使用它来生成密钥对,使用该密钥作为我的基础,任何有关查找位置的建议都将有所帮助,此外,此git repo测试类中的私钥在解密时也可以正常工作,例如,该私钥似乎工作正常。
“MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgCPSuFr4iSIaQprjj” + “chHPyDu2NXFe0vDBoTpPkYaK9dehRANCAATnaFz / vQKuO90pxsINyVNWojabHfbx” + “9qIJ6uD7Q7ZSxmtyo / EZ3 / o2kDT8g0pIdyVIYktCsq65VoQIDWSh2Bdm”
但是我生成的这些没有。
ME0CAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEMzAxAgEBBCAn0M1F8ej / KhDm2VpEJZtMXGRpwa73m5k3J / D + 5Va9RaAKBggqhkjOPQMBBw ==
open ssl to generate keys:
privatekey:
openssl pkcs8 -topk8 -inform PEM -outform DER -in key.pem -nocrypt | base64 | paste -sd "\0" -
publickey:
openssl ec -in key.pem -pubout -text -noout 2> /dev/null | grep "pub:" -A5 | sed 1d | xxd -r -p | base64 | paste -sd "\0" -
https://github.com/chengbo/ApplePayAndroidPayDecryption/blob/master/Decryption/TokenDecrypter.cs
KeyParameter keyparam = ParameterUtilities.CreateKeyParameter("AES", encryptionKeyBytes);
ParametersWithIV parameters = new ParametersWithIV(keyparam, symmetricIv);
IBufferedCipher cipher = GetCipher();
cipher.Init(false, parameters);
try
{
output = cipher.DoFinal(cipherData);
}
catch (Exception ex)
{
throw new ApplicationException("Invalid Data", ex);
}
答案 0 :(得分:-1)
公共静态类AESHelper {
public static string Encrypt(string plaintext, string key, string vector)
{
return Encrypt(plaintext, key, Encoding.UTF8.GetBytes(vector));
}
public static string Encrypt(string plaintext, string key, byte[] vector)
{
return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(plaintext), key, vector));
}
public static byte[] Encrypt(byte[] plaintext, string key, byte[] vector)
{
using (var rijndael = new RijndaelManaged() { Key = Encoding.UTF8.GetBytes(key), Mode = CipherMode.CBC, Padding = PaddingMode.PKCS7, IV = vector })
using (var encryptor = rijndael.CreateEncryptor())
{
var resultArray = encryptor.TransformFinalBlock(plaintext, 0, plaintext.Length);
return resultArray;
}
}
public static string Decrypt(string ciphertext, string key, string vector)
{
return Decrypt(ciphertext, key, Encoding.UTF8.GetBytes(vector));
}
public static string Decrypt(string ciphertext, string key, byte[] vector)
{
return Encoding.UTF8.GetString(Decrypt(Convert.FromBase64String(ciphertext), key, vector));
}
public static byte[] Decrypt(byte[] ciphertext, string key, byte[] vector)
{
using (var rijndael = new RijndaelManaged() { Key = Encoding.UTF8.GetBytes(key), Mode = CipherMode.CBC, Padding = PaddingMode.PKCS7, IV = vector })
using (var decryptor = rijndael.CreateDecryptor())
{
var resultArray = decryptor.TransformFinalBlock(ciphertext, 0, ciphertext.Length);
return resultArray;
}
}
}