字符串压缩加密算法(可逆)

这篇具有很好参考价值的文章主要介绍了字符串压缩加密算法(可逆)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

业务场景:App下单后的订单,需要在另一个内部系统中进行扫码打印。两个程序包括服务器之间网络不互通,所以想到了通过二维码携带内容做数据交互,但是将内容转为base64后发现字符串太长,放入二维码后二维码密度相当大,几乎无法被扫描,所以就想到了给字符串进行压缩,从而减少字符串的长度。在App端进行加密,在内部系统中进行解密读取。

(1)下面是介绍环境配置

①首先是net core版本,此版本NET自带Brotli库,直接用就可以了,案例网上搜一下,这里不进行赘述。

②其他Net Framework版本,需要先引入dll包(放在资源里面了,需要自行下载),然后调用。

(2)下面介绍调用方式

①在net 4以上版本中,因为System.Stream类支持CopyTo()方法,所以直接用下面这种方式就可以。

    public static class EncryptionHelper
    {
        public static string Encode(string str)
        {
            var bytes = System.Text.Encoding.UTF8.GetBytes(str);
            using (var memoryStream = new MemoryStream())
            {
                using (var brotliStream = new BrotliStream(memoryStream, CompressionMode.Compress,true))
                {
                    brotliStream.Write(bytes, 0, bytes.Length);
                }

                var result = Convert.ToBase64String(memoryStream.ToArray());
                return result;
            }
        }

        public static string DeEncode(string str)
        {
            var bytes = Convert.FromBase64String(str);
            using (var memoryStream = new MemoryStream(bytes))
            {
                using (var outputStream = new MemoryStream())
                {
                    using (var decompressStream = new BrotliStream(memoryStream, CompressionMode.Decompress))
                    {
                        decompressStream.CopyTo(outputStream);
                    }
                    var buffer = outputStream.ToArray();

                    return System.Text.Encoding.UTF8.GetString(buffer);
                }
            }
        }
    }

②在net 2.0左右的版本中,由于System.Stream类中不支持CopyTo()方法,所以只能手动将数据流转为byte数组,代码如下。

    public static class EncryptionHelper
    {
        public static string Encode(string str)
        {
            var bytes = System.Text.Encoding.UTF8.GetBytes(str);
            using (var memoryStream = new MemoryStream())
            {
                using (var brotliStream = new Brotli.BrotliStream(memoryStream, CompressionMode.Compress, true))
                {
                    brotliStream.Write(bytes, 0, bytes.Length);
                }

                var result = Convert.ToBase64String(memoryStream.ToArray());
                return result;
            }
        }

        public static string DeEncode(string str)
        {
            var bytes = Convert.FromBase64String(str);
            using (var memoryStream = new MemoryStream(bytes))
            {
                var decompressStream = new Brotli.BrotliStream(memoryStream, CompressionMode.Decompress);
                byte[] mybytes = new byte[64*1024];
                decompressStream.Read(mybytes, 0, mybytes.Length);
                decompressStream.Dispose();

                Stream s = new MemoryStream();
                return System.Text.Encoding.UTF8.GetString(mybytes);

            }
        }

    }

(3)最后介绍一个数据交互时,压缩数据的案例。

    public class AppPrintinfo
    {
        /// <summary>
        /// 
        /// </summary>
        public string Filea{ get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string Fileb{ get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string Filec{ get; set; }

        /// <summary>
        /// 
        /// </summary>
        public List<AppPrintDetail> MRList { get; set; }

        public override string ToString()
        {
            var l = string.Join("|", MRList.Select(s =>s.ToString()).ToArray());


            var r = Filea+ "`" + Fileb+ "`" + Filec+ "<" + l;

            return r;
        }

    }

    public class AppPrintDetail
    {
        /// <summary>
        /// 
        /// </summary>
        public string Filed1 { get; set; }
        public string Filed2 { get; set; }
        public string Filed3 { get; set; }
        public string Filed4 { get; set; }
        public string Filed5 { get; set; }

        public override string ToString()
        {
            return Filed1+ "`" + Filed2+ "`" + Filed3+ "`" + Filed4+ "`" + Filed5;
        }
    }

 public static void test()
        {
            AppPrintinfo appPrintinfo = new AppPrintinfo();
            appPrintinfo.Filea= "";
            appPrintinfo.Fileb= "";
            appPrintinfo.Filec= "";
            List<AppPrintDetail> list = new List<AppPrintDetail>();
            list.Add(new AppPrintDetail() {.....});
            list.Add(new AppPrintDetail() {.....});
            list.Add(new AppPrintDetail() {.....});
            list.Add(new AppPrintDetail() {.....});
            list.Add(new AppPrintDetail() {.....});
            list.Add(new AppPrintDetail() {.....});
            var str = appPrintinfo.ToString();//先尽可能地压缩数据

            var enCodeStr = EncryptionHelper.TestEncode(str);//加密

            var deEnCodeStr = EncryptionHelper.TestDeEncode(enCodeStr);//解密
        }

在数据接收方,需要用split一段一段截取。文章来源地址https://www.toymoban.com/news/detail-504739.html

到了这里,关于字符串压缩加密算法(可逆)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 加密字符串

    描述‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬ 密码对照表的第一行为明码行,放置大写字母表(如

    2023年04月08日
    浏览(44)
  • 摩尔斯电码加密字符串

    摩尔斯电码滴答“.-”,加密字符串。   (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网 :https://www.python.org/ Free :大咖免费“ 圣经 ”教程《 python 完全自学教程 》,不仅仅是基础那么简单…… 地址:https://lqpybook.readthedocs.io/   自学并

    2024年02月06日
    浏览(50)
  • 华为OD-字符串加密

    有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,将所得结果作为新字母表开头,并将新建立的字母表中未出现的字母按照正常字母表顺序加入新

    2024年02月11日
    浏览(48)
  • 【刷题】 leetcode 面试题 01.06 字符串压缩

    来看题目: 根据题目所说,我们需要完成函数书写,保证返回一个相对较小的字符数组: 如果压缩后比原字符串小,则返回压缩字符串,否则返回原字符串。 本思路一步一步操作,逐步完成任务 先确认字符串长度是否小于 2 ,小于直接返回( 因为压缩字符串长度至少是2

    2024年01月24日
    浏览(50)
  • 华为OD真题--字符串加密

    2023华为OD统一考试(A+B卷)题库清单-带答案(持续更新)or2023年华为OD真题机考题库大全-带答案(持续更新) \\\"给你一串未加密的字符串str,通过对字符串的每一个字母进行改变来实现加密,加密方式是在每一个字母str[i]偏移特定数组元素a[i]的量, 数组a前三位已经赋值:

    2024年02月13日
    浏览(44)
  • Android StringFog 字符串自动加密

    一、StringFog 作用 一款自动对dex/aar/jar文件中的字符串进行加密Android插件工具,正如名字所言,给字符串加上一层雾霭,使人难以窥视其真面目。可以用于增加反编译难度,防止字符串代码重复。 支持java/kotlin。 支持app打包生成的apk加密。 支持aar和jar等库文件加密。 支持加

    2024年02月02日
    浏览(41)
  • Java实现字符串加密与解密

    我们在设计登录程序时需要用到保存用户名和密码的功能,如果是直接写入到txt文件中保存很容易被木马程序识破,所以就必须先对密码加密,只留存密文。 今天介绍的是使用 十六进 制转换的方式加密数据。 得到结果: 757376662d312d6d7064626d697074752d323534342d717974646b 现在我们将

    2024年02月11日
    浏览(48)
  • python实现AES-128#实现加密字符串和加密文件

    这篇文章是对之前的一篇文章的重写和优化AES加密算法基于python实现 脚本语言:Python 已实现的功能 明文和密密钥可以是任意字符:中文,字符,数字或符号。 ​ 明文长度任意,密钥的字节数不能超过16字节。默认编码为utf-8所以,密钥最多支持5个中文字符 待加密的数据:可

    2024年02月12日
    浏览(90)
  • 【业务功能篇50】ObjectMapper-将java对象转为json字符串

    ObjectMapper可以实现Java对象和json字符串间互相转换,我们经常用到的是它的J ava对象转json字符串功能 。 这里目的是 【json字符串转为Java对象:readValue(json字符串,类.class)】 【Java对象转为json字符串:writeValueAsString(class类对象)】      

    2024年02月15日
    浏览(53)
  • 【数据结构】数组和字符串(五):特殊矩阵的压缩存储:稀疏矩阵——压缩稀疏行(CSR)

    【数据结构】数组和字符串(一):矩阵的数组表示   矩阵是以按行优先次序将所有矩阵元素存放在一个一维数组中。但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包