SafeNet推出行业首款白盒密码软件保护解决方案

下面是基于KWIC 的关键字匹配算法(管道+过滤器模式下实现)

关键部分的管道+过滤器 软件体系下的实现, 在很多的关键字搜索平台都使用了这一 循环移位+排序输出的 关键字匹配算法:

具体需求如下:

1、使用管道-过滤器风格:

每个过滤器处理数据,然后将结果送至下一个过滤器,。要有数据传入,过滤器即开始工作。过滤器之间的数据共享被严格限制在管道传输

四个过滤器:

输入(Input filter):

从数据源读取输入文件,解析格式,将行写入输出管道

移位(CircularShifter filter):循环移位

排序(Alphabetizer filter):

输出(Output filter)

管道:

in_cs pipe

cs_al pipe

al_ou pile

例如:

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace KWIC
{
    /// <summary>
    /// 管道类
    /// </summary>
    public class Pipe
    {
      List<string> word;
      public List<string> read()
        {
            return word;
        }
      public void write(List<string> word)
        { this.word = word; }
    }

    /// <summary>
    /// 管道之间的过滤器接口
    /// </summary>
    public abstract class Filter
    {

        public virtual void Transform()
        { }
    }

    /// <summary>
    /// 继承并实现实现管道接口
    /// </summary>
    public class InputFilter : Filter
    {

        public Pipe outPipe;
        public List<string> word;
        public InputFilter(List<string> word, Pipe outPipe)
        {
            this.word = word;
            this.outPipe = outPipe;
        }
        public void Transform()
        {
            outPipe.write(word);
        }
    }

    /// <summary>
    /// 继承并实现过滤器接口
    /// </summary>
    public class CircleShiftFilter : Filter
    {
        public Pipe inputPipe;
        public Pipe outPipe;
        public CircleShiftFilter(Pipe inputPipe, Pipe outPipe)
        {
            this.inputPipe = inputPipe;
            this.outPipe = outPipe;
        }
        /// <summary>
        /// 关键的循环移位函数
        /// </summary>
        public virtual void Transform()
        {
            List<string> word = inputPipe.read();

            /////////////////////////////////////////////// 补充代码,将WORD数组中字符串循环移位////////////////////////////////////////////////////////

            List<string> turned_words = new List<string>();

            // 获得每一行字符串数据
            foreach (string line in word)
            {
                // 拆分一句话
                string[] words = line.Split(' ');

                // 获取单词数
                ulong word_number = (ulong)words.LongLength;

                // 临时存储中间排序好的串
                List<string> tmp_words = new List<string>();

                tmp_words.Clear();

                tmp_words.Add(line);

                string tmp_line = "";

                for (ulong i = 0; i < word_number - 1; i++)
                {
                    // 获取上一行串
                    tmp_line = tmp_words[tmp_words.Count - 1];

                    // 获取上一行串的最后一个单词
                    string last_word = tmp_line.Split(' ')[word_number -1];

                    // 获取上一行串的除了最后一个单词之外的所有单词
                    string left_words = tmp_line.Substring(0, (tmp_line.Length -last_word.Length-1 ));

                    tmp_words.Add(last_word +" "+ left_words );
                }

                // 移除原有的串
                tmp_words.RemoveAt(0);

                // 将一句移位的串加到临时的list集合
                turned_words.AddRange(tmp_words);

            }

            // 将所有移位的串加到原来list集合
            word.AddRange(turned_words);

            /////////////////////////////////////
            outPipe.write(word); 

        }
    }

    /// <summary>
    /// 实现的排序过滤器类
    /// </summary>
    public class AlphaFilter : Filter
    {
        public Pipe inputPipe;
        public Pipe outPipe;
        public AlphaFilter(Pipe inputPipe, Pipe outPipe)
        {
            this.inputPipe = inputPipe;
            this.outPipe = outPipe;
        }

        /// <summary>
        /// 排序输出函数
        /// </summary>
        public void Transform()
        {
            List<string> word = inputPipe.read();

            ////////////////////////////////////// 补充代码,将word数组中单词排序输出/////////////////////////////////////////////////
            word.Sort();

            outPipe.write(word); 

        }
    }

    /// <summary>
    /// 实现输出过滤器接口类
    /// </summary>
    public class OutputFilter : Filter
    {
        public Pipe inputPipe;
        public Pipe outPipe;
        public OutputFilter(Pipe inputPipe, Pipe outPipe)
        {
            this.inputPipe = inputPipe; this.outPipe = outPipe;

        }
        public  void Transform()
        {
            List<string> word = inputPipe.read();
            outPipe.write(word);
        }
    }

    /// <summary>
    /// 程序的整体运行框架
    /// </summary>
    public class KWIC_System
    {

        Pipe in_cs; // create three objects of Pipe
        Pipe cs_al; // and one object of type
        Pipe al_ou; // FileInputStream
        Pipe ou_ui; // FileInputStream
        InputFilter inputFilter;
        CircleShiftFilter shifter;
        AlphaFilter alpha;
        OutputFilter output; // output to screen
      public   KWIC_System()
        {
            in_cs = new Pipe(); // create three objects of Pipe
            cs_al = new Pipe(); // and one object of type
            al_ou = new Pipe(); // FileInputStream
            ou_ui = new Pipe(); // FileInputStream

            List<string> word = new List<string>();
	    word.Add(Regex.Replace("I love you".Trim(), @"\s+", " ")); //正则会获取到所有类型的空格(比如制表符,新行等等),然后将其替换为一个空格
            word.Add(Regex.Replace("me too".Trim(), @"\s+", " "));
            word.Add(Regex.Replace("do you know".Trim(), @"\s+", " "));  

            inputFilter = new InputFilter(word, in_cs);
            shifter = new CircleShiftFilter(in_cs, cs_al);
            alpha = new AlphaFilter(cs_al, al_ou);
            output = new OutputFilter(al_ou,ou_ui); // output to screen
        }
        public List<string > GetResult()
        {
            inputFilter.Transform();
            shifter.Transform();
            alpha.Transform();
            output.Transform();

            return ou_ui.read();
        }

    }

}

(备注:如果想换行这里想换行输出,需要在结尾输出的每一行结尾加‘\r\n’)

在广泛的搜索技术中,其实这个关键字匹配算法应用范围很广,比如我们常见的Baidu和Google的搜索关键字 提示功能。



SafeNet推出行业首款白盒密码软件保护解决方案

时间: 2024-08-04 13:02:12

SafeNet推出行业首款白盒密码软件保护解决方案的相关文章

SafeNet推出行业首款白盒password软件保护解决方式

数据保护领域的全球率先企业SafeNet公司日前宣布,推出行业首款採用白盒安全技术的的软件保护方案.SafeNet 圣天诺 软件授权与保护解决方式如今纳入了新的功能,可在"白盒" 环境中保护安全算法免受攻击.此前,攻击者一般会随心所欲地观察和改变当中动态源代码的运行和内部算法的细节. 传统上,在软件保护技术中,安全算法一般会在攻击者的眼皮底下运行.没有黑盒保护密钥,因此应用程序的运行可一步一步地监视,全部訪问过的数据均为可见.为了更好地保护密钥不受损害,我们须要採用一种不同的方法. S

大视电子推出世界首款HDMI版三屏宝

大视电子推出世界首款HDMI版三屏宝 目前上海大视电子科技有限公司(上海股权交易中心挂牌,企业名称:大视科技:股票代码:201276),目前推出了HDMI版三屏宝,型号为MV303-HDMI. 图一 MV303-HDMI三屏宝 大视电子MV303-HDMI三屏宝是世界首款支持HDMI 1.4 3Ghz输入的三屏宝支持4Kx2K输入,MV303-HDMI 支持水平1X2,1X3分割,同时也支持垂直2X1,3X1分割,支持常规三屏宝3072x768 60Hz,3840x800 60Hz,3840x1

PMC推出业界首款12Gb/s SAS扩展卡

PMC推出业界首款12Gb/s SAS扩展卡 助力实现高密度的数据中心服务器 Adaptec PCIe扩展卡为下一代服务器提供24个端口, 联接更多高性能HDD及SSD          引领大数据连接.传送以及存储,提供创新半导体及软件解决方案的PMC?公司(纳斯达克代码:PMCS)最新推出业界首款12Gb/s SAS扩展卡,助力实现高密度的服务器.IDC[i]认为,高密度服务器是全球服务器市场中增长最快的细分市场.Adaptec? 12Gb/s SAS扩展卡助力实现随数据中心存储需求增长而催

3D打印闪耀中博会,“湖南智造”再展新风采 ——华曙高科推出全球首款开源可定制化金属3D打印机

"2015中国中部投资贸易博览会"5月18日在武汉拉开帷幕,湖南省商务厅组织我省代表企业积极参与.其中,华曙高科技有限责任公司作为国内3D打印产业领军企业在展会发布全球首款开源可定制化金属3D打印机FS271M,成为此次展会的一大亮点. 随着我国将3D打印提升到国家战略层面,以及今年首个"国家计划"的出台,3D打印产业的发展得到越来越多人的关注.机遇与挑战并存,面对国内尚不成熟的3D打印产业发展,以及以美.德为首的国际3D打印产业巨头的市场竞争,本土3D打印企业如何

联想宣布全球首款5G电脑!

导读 随着,5G 套餐商用以及 5G 手机开卖,消费者终于享受到了 5G 带来的高速体验.而 PC 作为大家最常用的生产力工具,也即将享受到 5G 带来的红利.在今天上午的 2019 联想创新科技大会上,联想宣布推出全球首款 5G 电脑.据悉,这款全球 5G 电脑包括三项核心技术:双制式全频段,频率自适应天线,双路闪充. 联想集团高级副总裁.全球消费业务部&先进创新中心总经理贾朝晖表示,这款电脑将让用户体验到 5G 的速度与激情.联想宣布全球首款5G电脑!联想宣布全球首款5G电脑!不过,目前有关

2016年7月6日,阿里巴巴集团和上汽联合发布全球首款互联网汽车

一段试车视频广为传播:阿里巴巴集团董事局主席马云和上汽集团董事长陈虹坐在一辆SUV的后排,副驾驶的位置上是阿里巴巴集团技术委员会主席王坚,司机则是阿里巴巴集团CEO张勇. 7 月6 日,杭州西湖区云栖小镇,名为荣威RX5 的全球首款互联网汽车(OS’Car)成为了在社交媒体上刷屏的“网红”. 阿里上汽高管集体为这款汽车站台,可见其份量之重.在此之前,互联网公司和传统车企被认为是两种完全不同的物种,非但没有过深入底层的全面合作,而且彼此之间多存戒心.不少传统车企认为互联网公司是高举“颠覆”大旗.于

腾讯首款区块链游戏23日发布,腾讯精灵还是腾讯妖怪?

昨天,腾讯区块链业务总经理蔡弋戈在2018年中国"互联网+"数字经济峰会金融分论坛上透露,腾讯将于4月23日发布首款区块链游戏. 据悉,腾讯首款区块链游戏代号"Z".腾讯将会注重对区块链底层技术的应用,以提升"Z"的可玩性和真实性. 那么,腾讯的首款区块链游戏会是什么样的呢?我们不妨先做一些猜想. 一.从国内的区块链游戏说起 玺哥注意到,腾讯首款区块链强调的是"可玩性"和真实性.在说区块链游戏的"可玩性"和

APICloud首款全功能集成开发工具重磅发布,彰显云端一体理念

近日,APICloud重磅推出首款云端一体的全功能集成开发工具--APICloud Studio 2.为了更深入了解这款开发工具的特性及优势,APICloud CTO 邹达针对几个核心问题做出了解答. 一.APICloudStudio 2是一款什么样的开发工具? 我们为APICloud Studio 2提炼出三个关键词,「Atom」.「云端一体」和「全功能集成」. 首先,APICloud Studio 2是一款基于Atom内核的开发工具.众所周知,Atom是一款主流.开源的前端编码工具,在Git

软件测试不再黑盒— threadingtest带来第二代白盒覆盖率技术

软件测试不再黑盒- threadingtest带来第二代白盒覆盖率技术 穿线测试对于测试界的一个重大创新在于,在白盒测试理论出现数十年以后,上海零一拼装信息技术有限公司结合在测试理论方面十余年的潜心研究,率先提出了第二代覆盖率技术,这绝对不是一个口号,而是ZOA真正对于白盒测试的理解以及对于标准第三方测试服务的深度理解经过数年的基础研究以及2年有余的研发而推出的达到商用标准的技术.现在先让我们温习下经典的测试理论: 1.测试方法论 黑盒功能测试法 黑盒功能测试法, 是把要测试的软件看成一个 "黑