【问题标题】:Fail to decrypt string using .pem无法使用 .pem 解密字符串
【发布时间】:2016-03-18 04:12:39
【问题描述】:

我想将解密后的字符串转换为数据字符串(我可以读取属性)

我尝试了here的代码

string token ="eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJpc3N1ZXIiLCJzdWIiOiJzdWJqZWN0IiwiYXVkIjoiYXVkaWVuY2UiLCJleHAiOjE0NjAwMDIxNzEsIm5iZiI6MTQ1ODI3Mzg3MSwiaWRnSWQiOiIwMDAxNzI4MTcwIiwic2Vjb25kRmEiOiJmYWxzZSIsInJvbGVzIjoiW09OTElORV9UUkFESU5HLCBST0xFX09OTElORV9UUkFESU5HLCBPTkxJTkVfVklFV19BQ0NPVU5UX0lORk8sIFJPTEVfT05MSU5FX1ZJRVdfQUNDT1VOVF9JTkZPXSIsImN1c3RvbWVySWQiOiIwMDAxNzI4MTcwIiwidnRvc0F1dGhlbnRpY2F0ZWQiOiJmYWxzZSIsInVzZXJJZCI6IjUyNzY5IiwiY3VzdG9tZXJOYW1lIjoiTmd1eWVuIFZhbiBNIiwiZW1haWwiOiJtaW5odHE5MEBnbWFpbC5jb20iLCJ1c2VybmFtZSI6InRlc3QyMiIsInN0YXR1cyI6Ik9OTElORV9BQ1RJVkUifQ.CfcVsKidaHi6QEneYDfox9509SnIQUQZS6OUWf3jBN4OnTEQ-xFeHeIuQP6qgEK3b_0fLjWZ4OT7qnItLMKYg0vd68OxjDbHw79C4jQNnxq1EUgsEs72-gNNBV42n6I0R5VZy4t6AuKgHTFp6gN4fTisfA7vnX2Vq5Sg2faAoMl2nevN7F1P9YEWFPea9qoDqmPwGY72DvEauZNZmIb7OvtRvoBFAK_cIJvuRShIzUfQ5q4W4sMiRH92Ou_6S7k4NfqO8kOdoJkSqZCDlhJIdAmyW4IBsYc5TvgeoGIrzgKCVr2_1wM0RHXE3vq6oobe2rB68Rc8eQ0VYzH6fH4KQA";
var bytesToDecrypt = Convert.FromBase64String(token); // string to decrypt, base64 encoded

AsymmetricCipherKeyPair keyPair; 

using (var reader = File.OpenText(@"c:\myprivatekey.pem")) // file containing RSA PKCS1 private key
    keyPair = (AsymmetricCipherKeyPair) new PemReader(reader).ReadObject(); 

var decryptEngine = new Pkcs1Encoding(new RsaEngine());
decryptEngine.Init(false, keyPair.Private); 

var decrypted = Encoding.UTF8.GetString(decryptEngine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length));

但是,它在第​​ 2 行抛出异常:

var bytesToDecrypt = Convert.FromBase64String(token); //exception

例外是:

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

如何解决?

【问题讨论】:

    标签: c# encryption pem


    【解决方案1】:

    我对您的代码进行了一些尝试,这对我有用:

            string token = "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJpc3N1ZXIiLCJzdWIiOiJzdWJqZWN0IiwiYXVkIjoiYXVkaWVuY2UiLCJleHAiOjE0NjAwMDIxNzEsIm5iZiI6MTQ1ODI3Mzg3MSwiaWRnSWQiOiIwMDAxNzI4MTcwIiwic2Vjb25kRmEiOiJmYWxzZSIsInJvbGVzIjoiW09OTElORV9UUkFESU5HLCBST0xFX09OTElORV9UUkFESU5HLCBPTkxJTkVfVklFV19BQ0NPVU5UX0lORk8sIFJPTEVfT05MSU5FX1ZJRVdfQUNDT1VOVF9JTkZPXSIsImN1c3RvbWVySWQiOiIwMDAxNzI4MTcwIiwidnRvc0F1dGhlbnRpY2F0ZWQiOiJmYWxzZSIsInVzZXJJZCI6IjUyNzY5IiwiY3VzdG9tZXJOYW1lIjoiTmd1eWVuIFZhbiBNIiwiZW1haWwiOiJtaW5odHE5MEBnbWFpbC5jb20iLCJ1c2VybmFtZSI6InRlc3QyMiIsInN0YXR1cyI6Ik9OTElORV9BQ1RJVkUifQ.CfcVsKidaHi6QEneYDfox9509SnIQUQZS6OUWf3jBN4OnTEQ-xFeHeIuQP6qgEK3b_0fLjWZ4OT7qnItLMKYg0vd68OxjDbHw79C4jQNnxq1EUgsEs72-gNNBV42n6I0R5VZy4t6AuKgHTFp6gN4fTisfA7vnX2Vq5Sg2faAoMl2nevN7F1P9YEWFPea9qoDqmPwGY72DvEauZNZmIb7OvtRvoBFAK_cIJvuRShIzUfQ5q4W4sMiRH92Ou_6S7k4NfqO8kOdoJkSqZCDlhJIdAmyW4IBsYc5TvgeoGIrzgKCVr2_1wM0RHXE3vq6oobe2rB68Rc8eQ0VYzH6fH4KQA";
            string converted = token.Replace("-", "");
            converted = converted.Replace("_", "");
            converted = converted.Replace(".", "");
            int mod4 = converted.Length % 4;
            if (mod4 > 0)
            {
                converted += new string('=', 4 - mod4);
            }
            var bytesToDecrypt = Convert.FromBase64String(converted);
    

    您遇到异常可能是因为有一些字符(如(-_.)在 base 64 字符串中无效,另一个是您的字符串长度应该具有正确的长度还。有关更多信息,您可以看到这个- WikipediaMSDN

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 2018-05-19
      相关资源
      最近更新 更多