`

php&.net对称压缩解压缩探讨

    博客分类:
  • PHP
 
阅读更多

http://blog.csdn.net/michaell_zhang/article/details/5979883

C#客户端访问PHP SOAP WebService,当传输大量文本数据时,可以通过压缩减少网络传输。

C#在System.IO.Compression命名空间下提供了两个类GZipStream 类和DeflateStream类来进行数据的压缩和解压缩。经本人实验,在C#下使用GZipStream压缩的字符串在PHP下使用gzuncompress函数无法解压缩,有人说可以使用gzdecode解开,但本人的PHP不支持gzdecode函数,但有gzencode函数(why?原因未明,据说是PHP的BUG,可能到PHP6才提供此函数)。

C#下使用DeflateStream类压缩文本后,可以在PHP下用gzinflate解压缩。示例代码如下:

客户端C#(在头4个字节增加了原文本的长度,方便在C#中解压缩,对于在PHP端解压缩这个没有用处):

public static string Compress(string text)
        {
            byte[] buffer = Encoding.UTF8.GetBytes(text);
            MemoryStream ms = new MemoryStream();
            using (DeflateStream zip = new DeflateStream(ms, CompressionMode.Compress, true))
            {
                zip.Write(buffer, 0, buffer.Length);
            }
            ms.Position = 0;
            MemoryStream outStream = new MemoryStream();
            byte[] compressed = new byte[ms.Length];
            ms.Read(compressed, 0, compressed.Length);
            byte[] gzBuffer = new byte[compressed.Length + 4];
            System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
            System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
            return Convert.ToBase64String(gzBuffer);
        }

 服务端PHP:

 

function Decompress($strSource)
{
    $strTemp = base64_decode($strSource);
    $strTemp = substr($strTemp, 4);
    return gzinflate($strTemp);
}

 支持中文,编码为UTF8.

 

http://blog.csdn.net/allsharps/article/details/7357328

/// <summary>
    /// 简单的压缩
    /// </summary>
    public static class CompressHelper
    {
        /// <summary>
        /// 压缩字符串
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static byte[] CompressString(string str)
        {
            return CompressBytes(Encoding.UTF8.GetBytes(str));
        }

        /// <summary>
        /// 压缩二进制
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static byte[] CompressBytes(byte[] str)
        {
            var ms = new MemoryStream(str) {Position = 0};
            var outms = new MemoryStream();
            using (var deflateStream = new DeflateStream(outms, CompressionMode.Compress, true))
            {
                var buf = new byte[1024];
                int len;
                while ((len = ms.Read(buf, 0, buf.Length)) > 0)
                    deflateStream.Write(buf, 0, len);
            }
            return outms.ToArray();
        }
        /// <summary>
        /// 解压字符串
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string DecompressString(byte[] str)
        {
            return Encoding.UTF8.GetString(DecompressBytes(str));
        }
        /// <summary>
        /// 解压二进制
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static byte[] DecompressBytes(byte[] str)
        {
            var ms = new MemoryStream(str) {Position = 0};
            var outms = new MemoryStream();
            using (var deflateStream = new DeflateStream(ms, CompressionMode.Decompress, true))
            {
                var buf = new byte[1024];
                int len;
                while ((len = deflateStream.Read(buf, 0, buf.Length)) > 0)
                    outms.Write(buf, 0, len);
            }
            return outms.ToArray();
        }
    }

 

 

分享到:
评论

相关推荐

    .NET对称加密算法工具

    .NET框架(.NET FCL,即.NET Framework Class Library)提供了丰富的加密功能,其中包括对称加密算法。对称加密是一种常见的加密方法,它依赖于相同的密钥进行数据加密和解密,因此效率较高,适合大量数据的加解密...

    .net RSA对称加密 解决加密长度限制

    .net c# RSA对称加密, 解决加密长度限制,可以直接使用

    用.NET非对称加密算法实例

    ### 使用.NET非对称加密算法实例 #### 一、引言 非对称加密是一种重要的加密方式,在现代信息安全领域有着广泛的应用。与对称加密不同的是,非对称加密使用一对密钥:公钥和私钥。公钥可以公开分发,而私钥则必须...

    asp.net RSA 私钥加密公钥解密 能解 php Java 实现RSA加密互通

    本文将深入探讨如何在ASP.NET环境中实现RSA加密,并且与PHP和Java进行互通,以及涉及的PKCS#8格式的密钥文件和BouncyCastle.Crypto.dll库的使用。 首先,RSA是一种基于大素数因子分解困难性的公钥加密算法,由Ron ...

    .net RSA非对称加密例子

    本示例将深入探讨如何在.NET环境中使用RSA加密,以确保信息的安全。 RSA(Rivest-Shamir-Adleman)是非对称加密算法的代表,其基本原理是利用两个大素数生成一对密钥:公钥和私钥。公钥可以公开给任何人,用于加密...

    vb.net加密解密源代码

    下面我们将详细探讨相关的知识点。 1. **VB.NET基础**: VB.NET是微软公司开发的一种面向对象的编程语言,它是.NET框架的一部分。VS2008(Visual Studio 2008)是微软提供的集成开发环境,支持包括VB.NET在内的...

    .NET加密技术剖析对称加密技术

    本文将深入剖析.NET中的对称加密技术,探讨其原理、实现方式以及在实际项目中的应用。 对称加密技术的核心思想是加密和解密使用相同的密钥。这使得它在处理大量数据时表现出较高的效率,适用于快速加密和解密大量...

    .Net几种加密方法(固定key 随机key 对称加密 MD5等)

    本文将详细介绍.NET中常见的几种加密方法,包括固定Key、随机Key、对称加密以及MD5加密。这些技术在保护敏感信息、验证数据完整性和防止数据篡改方面起着至关重要的作用。 1. 固定Key加密: 固定Key加密是指使用一...

    一无所有的气泡和超对称压缩

    我们研究超对称压缩的非摄动稳定性,关于通过无气泡的衰减。 我们显示了自旋结构不禁止这种不稳定性的示例,即费米子关于额外维度的周期性。 但是,这种``拓扑不受阻碍''的情况确实表现出众所周知的Coleman-De ...

    VB6压缩解压缩、加密解密源码大全

    这份"VB6压缩解压缩、加密解密源码大全"集合了丰富的算法,提供了21种不同的加密方法和54种压缩技术,对于深入理解和实践这些概念非常有价值。 首先,让我们探讨加密技术。加密是一种将原始数据(明文)转化为不可...

    .NET中的DES对称加密详解

    DES是一种对称加密(Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。一般密码长度为8个字节,其中56位加密密钥,每个第8位都用作奇偶校验

    C#、Vb.net加解密

    ### C# 和 VB.NET 中的加解密技术详解 #### 一、背景介绍 随着互联网技术的迅猛发展,数据安全成为越来越重要的问题。在软件开发过程中,为了保护用户隐私及重要信息,加密技术被广泛应用于各种场景。本篇文章将...

    轴对称橡胶垫的压缩模拟

    "轴对称橡胶垫的压缩模拟"这个主题聚焦于如何利用高级计算软件来理解和预测非线性材料,如橡胶,在受压情况下的行为。ABAQUS是一款业界公认的高级有限元分析软件,广泛用于模拟复杂几何形状和非线性材料属性。 ...

    Visual Studio .NET加密技术剖析系列课程(2):对称加密技术

    通过对这些文件的深入学习和分析,开发者可以更好地理解和实践.NET中的对称加密技术,从而提高数据安全保护能力。在实际应用中,还需要注意密钥管理,因为对称加密的安全性依赖于密钥的安全存储和交换,防止密钥泄露...

    .NET口令加密RAR完整源码

    8. **源码结构**:完整的源码应该包含多个类或模块,每个负责不同的功能,如密码输入验证、文件读写、压缩解压缩等。理解这些类之间的关系和职责划分有助于学习和维护代码。 9. **编译与部署**:最后,项目需要被...

    .NET SECURITY AND CRYPTOGRAPHY

    《.NET SECURITY AND CRYPTOGRAPHY》是一本深入探讨.NET框架下安全性和密码学的英文电子书,旨在帮助开发者理解并应用加密技术来保护应用程序和数据。这本书通过丰富的实例,详细阐述了.NET环境中如何实现安全编码和...

    VB加密解密及压缩代码

    综上所述,VB编程可以实现各种加密和压缩功能,尽管它可能不如专门的加密或压缩库那么强大,但结合.NET Framework的类库和其他开源库,开发者可以构建满足实际需求的解决方案。在实践中,理解不同加密算法的优缺点,...

    C#.NET 安全编程 实例 RSA DSA 对称 非对称 加密 解密 XML 数字签名

    本主题将深入探讨RSA和DSA两种非对称加密算法,以及对称加密的概念,同时涉及XML数字签名的实现。 首先,让我们了解对称加密和非对称加密的基本原理。对称加密使用相同的密钥进行加密和解密,如DES、3DES和AES等。...

    asp.net access 加密密码

    3. **对称加密**:如AES(高级加密标准),在ASP.NET中,可以使用`System.Security.Cryptography`命名空间中的类进行对称加密。这种方法适用于需要解密密码的情况,比如在服务器端验证用户身份时。然而,密钥管理是...

    .net 4.0 选择文件夹,自动压缩相关文件,支持密码加密

    在.NET 4.0框架下,使用C#开发桌面应用程序时,可以实现用户选择文件夹,然后自动压缩其中的文件并支持密码加密的功能。这个功能的实现涉及到几个关键知识点: 1. **文件和文件夹操作**: - `System.IO`命名空间...

Global site tag (gtag.js) - Google Analytics