c#对接顺丰图片文件

顺丰文档:https://open.sf-express.com/#/Api/expressApi/389652?level3=991999

文档使用的是AES加密,CBC模式,填充模式PKCS5Padding

实际上PKCS5Padding与PKCS7Padding基本上也是可以通用的,具体差异查看百度。

所以在c#中使用PaddingMode.PKCS7;

使用.net 5 控制台程序,编写测试代码

代码如下:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;
namespace SFPicture
{
    class Program
    {
        private static string SECRET = "axjGikUwgYVKiJ3A";
        public static byte[] ivBytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00 };
        static void Main(string[] args)
        {

            string responseMsg = "{\n" +
                 "    \"companyLogo\": \"SF\",\n" +
                 "    \"content\": \"njdEklz2DvgAnu6GNrtzrxZrta+jg6Z9DptuedRafk2aJ8Lbo6FH7c8Z4ZcS8I7MTV1Q02GaBacX\\nOrT" +
                 "IfNesEsrVE1POLzPUXfnRznmVbXcPz0mknRfU1qtMSJBtBJdT3loY6Fnd30oatPmNaMey7G2x\\nO4Sh3V4EbeCt3GrBwEMQk/qwBA" +
                 "IhS56B4rquN2lX3fvJENJt/boklc1pz0JybTHgyvp1yTRIyqkR\\nMjfcfrTks1OF/WJ5Iuy/dYGe8HFooHyYS+5y+agVJWjIXleOZ" +
                 "gXUwm/WcLGTxsjJgiVdGDQhPsJU\\nwU86HOqapeJbGSFDw0Nzxzqu53rXVeqYxJ+UdsUGSiTL7+0kStTWmtknxoj/1XpeueUkytbN" +
                 "jgP9\\nickUKA6V/k/+PkVKoWbyKO4K7CGtljrAvOIwnWPwTsygnFRTsiEG7w+QzAQuMqIFwkSBSjKesv7d\\nLkizTOENT18CkcNi" +
                 "tSZJ2fOv0liqdU0gfGpFK3hxlKf5fr4Q5YKl0UfZdr3YEQl0QqW+pViRjezI\\ndS7Fyk4984DHab4L+se6HTUf1v+OTzQ47cnKPc" +
                 "SNpYjRRB8HSeI+xLgAI7k+oUU/1xgWXZlMO2Jh\\nMG96iRI92cXHjH0W67CvFYYA5oSct/wClQZBj02h5VCtslx160swgOMZj" +
                 "eGqgK4SekhZdCs0qdSm\\nmNHQue4dfQt0EtnWJ3rDyEw6+66UAsYftEYdVAWKt92yl2ATctelJvN060wwQutxx2EPjOLx0whx\\n" +
                 "i8rfktmzh3bUyf/VLCUPjBl1jiHIFCreAa8XA+rOo/6HcyWHKMwSpY7P54nDY7Ds4U7c0NOqoMtF\\ns+R9u81jQnAKsylj4iDm" +
                 "eMoMi63cBJ6pfsh3ztU2qa260NWiEa0pzS9P0QEjCmjBpWAHAW70gx7L\\n/uGAu+ln/Uf27cbE2c61stnRBLDfMohQ9wvrLSF8xHx" +
                 "nV9h5noCXkAd4U/EtqhSaGRWdAIEZ6Dxk\\nucyMxtpz13v9M6eZ9PMgJKNIyHUVe38QF1XNw8SpvuBVUj41QMA0cJWS6NwSKUVBEf" +
                 "y7Zmiv7z/7\\nbEIwGv9Z/zUt1TFzhxn1VXJLCwYLAYDOaPYpj8qhHCaTs59dfFBIvj6k3rUeqS3c4dGzCUJQNbW0\\nCtqBWClPz" +
                 "AW29C4/2w+f9s0V1Mx3HaJKROEy1UyfdtiAUTL3XF6u5aki7ZKKf4iRvuC5tooNkA1M\\ng222fEqxpwAFfGQS98yHL0unes39XGo/" +
                 "17ke8CB1aI2f4m6+NW3fe+ciSZe5zEvz/84U4M8IDW/s\\nR3OImJNWoLF5sadfnf5xSYV8zzz2MRn+/4bN0tjJkIIBvBEiVf7cxFD" +
                 "F1tLR3rXE1SiMQDso110A\\nn1PsLjwcl6uMqYkcso8cLOuk5ysfim2MRs1CYsqMPqKu6XT2w5dwKYY+9hKtTW4lxBbBsqgvPp/t\\n" +
                 "qn50WZu7bYVPsxErXYTN1sHi17bp8bsl/qjAieZkiqw4TyxJF30El7Lb+BqD8opqSHeUlaxm68/s\\nQ8fh3xpfWxDLxa1j0Vt+a" +
                 "w18dadX3burYtjqPZo3L5Ny+Ph94dl0h4eeOceFPz1jqBwA8G/o3FPR\\n3zKCWnXgjy7Xqcspdu0v0lBSQHF5KVqwifnSDJZQDRZ" +
                 "A2qB9+Mgx1IgMMqaZwY+Kmfqyw5D7CVLk\\nilN/ecMPA3Ng5TLd8UvzUbr46Vxaun7JkwyfE3VgRC63DaLUeq08qVApggUSVgjK" +
                 "vz9IwpaNW3yL\\nb/01vjOVWRUVzUoj4of0A7VBERPOxHhDSFNjhj/GRbPInlR4mT7m5tUQoGQblhAByACKMvl0Omgr\\nASRACmav" +
                 "UcaxWrw05bn+8wdqtLvZuB8d+1wmhULgSUaQNH1jGz04UUsZhN3FWtEVFnO5TlHShFco\\nbhQK38J9Cblb+Lt4sgjSMcjX66VPpa" +
                 "PYxpQIVtiWTxfnWdkbJcFRKby5MBPVnL9qOL5npM/qmCcO\\nQUQkpK7iL9upbASLRZ9Oeu4GAiKg2H9AxJHC/gZ27LDQq7+REXnq" +
                 "zUAeZ/O3HDMXOA3amupgLCiC\\noZr6lUoAm3HbcOgP7KvduuqgOuzy5YfpHnG4IkQ/l0gVtT/5/DOVMTZAc3ORmeaVKoskdKzgri" +
                 "Zi\\nVFCBqUbH7DZdCTvMReGW3ykXFopMyYbclorXlVQICxcZEhdQ9XIfm3w2Qr48AYjuNReX7mP4IebB\\nudaM8vs3UZSpQd2gF" +
                 "V+Gl2GullPhCgXV+m0Ntpxu5pR3bwWCsEYpnN2nG7QXdtE+j7OgYoHK/geZ\\nAdfVCcrPCY265NmBzU8jH1haJCQdr7jlxrgKdtp" +
                 "DroKTJGh7CuuTq4oWe5fhyGlVBtF8dYByjGSD\\nNUhDzjrJLy0qhT4C6Q74TWe6Pr/LHDZyOhNsvXBl0BBamH96Ndn1QO0GMP8JO" +
                 "stzQFaRbXQ9uC1m\\nhsJkx0KqYQ1bC0dhLcfHCohcniP4OY/kF+dz1rGRrwkaiP96xpSpKzfbitUCrQ66ZdoBHwJYZuXn\\njpvqQ" +
                 "HDwWuFgARUvJ79ig+end1vv7k6DqqmsB1ZxC12hsv/oN/E8HtdT7zi9WcAeCAq6A5iKxdM4\\naKhrVDo7qgWNZYxVPn6q5XnZLDz" +
                 "OgnUu8TXGr8DD/Jk+HfnoOODMOIvHcozxsyReb/npTekxmYqF\\nC/NE5pXNmDdCsVFojO33l4PIrpfiK1TcGMwZeSF4upKX0id42" +
                 "SNnK2BPGKBFEmUsIXu7vWXHpxBd\\n8lIVmPNZ0vb/eXP2Fcom3v39ALVdMY93jgQI1BsuFh7U4N8YBKWbfAgrtFj/anujArNJcSg" +
                 "biWUr\\n1CFJjmAanPPuXaWHfU/3fIqQCFDt/8X8S0Xbzvt4dBe0LqRC7ObFIqLa2esaXcJ34bNgs3MgvdpV\\n6duebo7PNjX6ra0" +
                 "LHYbDUrSo3XO9NMBprWbToa+uKoDHgzsAVT0zffJTJSU6bG5zytta22mMKAOG\\nFmxwuU1z11/cltUMAxYd4nljt3tGBLhGRrWmvY" +
                 "dlQGRnqdMyhChvaFpkZB68rrvOTT9HQ08Pf2UT\\nz+A0dpXwZLpfwV7PzFHZRN4czA4LeUIqQVh3byfU0r/ReC26UEL4KUBU0hm6Y" +
                 "mDvuRM72QOWM7HD\\nNyMywtWUbOIdoslcKqa97FTu+bgXo4VS9c+gyQLY1SizSlPvxePewaoqMjzYT6TTsSZW0dAiOMdf\\nSUehT" +
                 "wNPvRs/NZBGPBXHKLTWZtiHE4WCCV9ghYXdzXxyL3N2BSYa2AM16wGQsDb201nmRsDWPFD8\\ngW9ZBuEMIB80XqdmYeWNHA+tWtH8" +
                 "Le59WyBNolNbjXxIZCL7HGT3qKH1McUxHLJrhL4UWFbg2u4H\\nYBX+QbI5li7ugK+mTlXJZ/eW81PmSUFkaTVLM+BrWseGsbjmZBD" +
                 "PT8aBk9QAb1j1Wyka9yX6NZ20\\nQEeijYAUWU3KlsOsrfSPqyrVoO9deyc8sTPdtxUzbJCtxGcHKoNwEG04/WF1TrNa5eZrPoYW1F" +
                 "0Q\\ne9+U4BnPSn8Fe6M9KysLT5Xu0XTGhbYhuRGXJFlU1JbfYxywlUs4r0nznodZFrrhmWV7MzavKUGQ\\n+/i2nuQDbjdz3Fxz8Z" +
                 "05lH22WnYmiGEiK+fwb8Z7JINT6a5uEYGchpXJYQB6t/ucjPRnE+Emcyco\\nt4oLVP3jaSrebQgg7TIXL84Ib9we/YbT63u0LDZp95" +
                 "jnZkrmjBPSz9YhVuD/oRgznuVjm8L5VTkS\\nWCQZ0opBwYfaW/NVaZhg5cDVcv+4wRCLp4S3zmMerM02FaUtoxShK9VwQ6K4nq4al" +
                 "/1mgFRR4ktG\\nGyhT0WEhNbW08FWuet8=\",\n" +
                 "    \"waybillNo\": \"SF1011854328486\"\n" +
                 "}";
            transferToImage(responseMsg);
        }
        public static void transferToImage(string msg)
        {
            var jsonObj=JsonConvert.DeserializeObject<ReceiveMsg>(msg);
            byte[] decode = Convert.FromBase64String(jsonObj.content);
            decode = AES_Decode(decode, SECRET);
            decode = Convert.FromBase64String(Encoding.UTF8.GetString(decode));
            using (FileStream fs = new FileStream("E:/解密顺丰/SF.png", FileMode.Create))
            {
                BinaryWriter bw = new BinaryWriter(fs);
                bw.Write(decode, 0, decode.Length);
            }
        }
        public static byte[] AES_Decode(byte[] textBytes, string key)
        {
            RijndaelManaged rijndaelCipher = new RijndaelManaged();
            rijndaelCipher.Mode = CipherMode.CBC;
            rijndaelCipher.Padding = PaddingMode.PKCS7;
            rijndaelCipher.KeySize = 128;
            rijndaelCipher.BlockSize = 128;
            byte[] encryptedData = textBytes;
            byte[] pwdBytes = System.Text.Encoding.UTF8.GetBytes(key);
            byte[] keyBytes = new byte[16];
            int len = pwdBytes.Length;
            if (len > keyBytes.Length)
                len = keyBytes.Length;
            System.Array.Copy(pwdBytes, keyBytes, len);
            rijndaelCipher.Key = keyBytes;
            rijndaelCipher.IV = ivBytes;
            ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
            byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
            return plainText;
        }
    }
    public class ReceiveMsg
    {
        public string companyLogo { get; set; }
        public string content { get; set; }
        public string waybillNo { get; set; }
    }
}
View Code

 

执行后,能顺利解析出文档上提供的图片

posted @ 2022-01-01 18:16  穿拖鞋的thread  阅读(251)  评论(0编辑  收藏  举报