kmdcodec.h

来自「konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版」· C头文件 代码 · 共 746 行 · 第 1/2 页

H
746
字号
/*   Copyright (C) 2000-2001 Dawit Alemayehu <adawit@kde.org>   Copyright (C) 2001 Rik Hemsley (rikkus) <rik@kde.org>   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU Lesser General Public License (LGPL)   version 2 as published by the Free Software Foundation.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with this program; if not, write to the Free Software   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   RFC 1321 "MD5 Message-Digest Algorithm" Copyright (C) 1991-1992.   RSA Data Security, Inc. Created 1991. All rights reserved.   The KMD5 class is based on a C++ implementation of   "RSA Data Security, Inc. MD5 Message-Digest Algorithm" by   Mordechai T. Abzug,	Copyright (c) 1995.  This implementation   passes the test-suite as defined in RFC 1321.   The encoding and decoding utilities in KCodecs with the exception of   quoted-printable are based on the java implementation in HTTPClient   package by Ronald Tschal鋜 Copyright (C) 1996-1999.   The quoted-printable codec as described in RFC 2045, section 6.7. is by   Rik Hemsley (C) 2001.*/#ifndef _KMDBASE_H#define _KMDBASE_H#define KBase64 KCodecs#include <qglobal.h>#include <qstring.h>#include <qiodevice.h>#include "kdelibs_export.h"/** * A wrapper class for the most commonly used encoding and * decoding algorithms.  Currently there is support for encoding * and decoding input using base64, uu and the quoted-printable * specifications. * * \b Usage: * * \code * QCString input = "Aladdin:open sesame"; * QCString result = KCodecs::base64Encode(input); * cout << "Result: " << result.data() << endl; * \endcode * * <pre> * Output should be * Result: QWxhZGRpbjpvcGVuIHNlc2FtZQ== * </pre> * * The above example makes use of the convenience functions * (ones that accept/return null-terminated strings) to encode/decode * a string.  If what you need is to encode or decode binary data, then * it is highly recommended that you use the functions that take an input * and output QByteArray as arguments.  These functions are specifically * tailored for encoding and decoding binary data. * * @short A collection of commonly used encoding and decoding algorithms. * @author Dawit Alemayehu <adawit@kde.org> * @author Rik Hemsley <rik@kde.org> */class KDECORE_EXPORT KCodecs{public:  /**   * Encodes the given data using the quoted-printable algorithm.   *   * @param in      data to be encoded.   * @param useCRLF if true the input data is expected to have   *                CRLF line breaks and the output will have CRLF line   *                breaks, too.   * @return        quoted-printable encoded string.   */  static QCString quotedPrintableEncode(const QByteArray & in,                                        bool useCRLF = true);  /**   * @overload   *   * Same as above except it accepts a null terminated   * string instead an array.   *   * @param str     string to be encoded.   * @param useCRLF if true the input data is expected to have   *                CRLF line breaks and the output will have CRLF line   *                breaks, too.   * @return        quoted-printable encoded string.   */  static QCString quotedPrintableEncode(const QCString & str,                                        bool useCRLF = true);  /**   * Encodes the given data using the quoted-printable algorithm.   *   * Use this function if you want the result of the encoding   * to be placed in another array which cuts down the number   * of copy operation that have to be performed in the process.   * This is also the preferred method for encoding binary data.   *   * NOTE: the output array is first reset and then resized   * appropriately before use, hence, all data stored in the   * output array will be lost.   *   * @param in      data to be encoded.   * @param out     encoded data.   * @param useCRLF if true the input data is expected to have   *                CRLF line breaks and the output will have CRLF line   *                breaks, too.   */  static void quotedPrintableEncode(const QByteArray & in, QByteArray& out,                                    bool useCRLF);  /**   * Decodes a quoted-printable encoded data.   *   * Accepts data with CRLF or standard unix line breaks.   *   * @param in  data to be decoded.   * @return    decoded string.   */  static QCString quotedPrintableDecode(const QByteArray & in);  /**   * @overload   *   * Same as above except it accepts a null terminated   * string instead an array.   *   * @param str  string to be decoded.   * @return     decoded string.   */  static QCString quotedPrintableDecode(const QCString & str);  /**   * Decodes a quoted-printable encoded data.   *   * Accepts data with CRLF or standard unix line breaks.   * Use this function if you want the result of the decoding   * to be placed in another array which cuts down the number   * of copy operation that have to be performed in the process.   * This is also the preferred method for decoding an encoded   * binary data.   *   * NOTE: the output array is first reset and then resized   * appropriately before use, hence, all data stored in the   * output array will be lost.   *   * @param in   data to be decoded.   * @param out  decoded data.   */  static void quotedPrintableDecode(const QByteArray & in, QByteArray& out);  /**   * Encodes the given data using the uuencode algorithm.   *   * The output is split into lines starting with the number of   * encoded octets in the line and ending with a newline.  No   * line is longer than 45 octets (60 characters), excluding the   * line terminator.   *   * @param in   data to be uuencoded   * @return     uuencoded string.   */  static QCString uuencode( const QByteArray& in );  /**   * @overload   *   * Same as the above functions except it accepts   * a null terminated string instead an array.   *   * @param str   string to be uuencoded.   * @return      encoded string.   */  static QCString uuencode( const QCString& str );  /**   * Encodes the given data using the uuencode algorithm.   *   * Use this function if you want the result of the encoding   * to be placed in another array and cut down the number of   * copy operation that have to be performed in the process.   * This is the preffered method for encoding binary data.   *   * NOTE: the output array is first reset and then resized   * appropriately before use, hence, all data stored in the   * output array will be lost.   *   * @param in   data to be uuencoded.   * @param out  uudecoded data.   */  static void uuencode( const QByteArray& in, QByteArray& out );  /**   * Decodes the given data using the uudecode algorithm.   *   * Any 'begin' and 'end' lines like those generated by   * the utilities in unix and unix-like OS will be   * automatically ignored.   *   * @param in   data to be decoded.   * @return     decoded string.   */  static QCString uudecode( const QByteArray& in );  /**   * @overload   *   * Same as the above functions except it accepts   * a null terminated string instead an array.   *   * @param str   string to be decoded.   * @return      uudecoded string.   */  static QCString uudecode( const QCString& str );  /**   * Decodes the given data using the uudecode algorithm.   *   * Use this function if you want the result of the decoding   * to be placed in another array which cuts down the number   * of copy operation that have to be performed in the process.   * This is the preferred method for decoding binary data.   *   * Any 'begin' and 'end' lines like those generated by   * the utilities in unix and unix-like OS will be   * automatically ignored.   *   * NOTE: the output array is first reset and then resized   * appropriately before use, hence, all data stored in the   * output array will be lost.   *   * @param in   data to be decoded.   * @param out  uudecoded data.   */  static void uudecode( const QByteArray& in, QByteArray& out );  /**   * Encodes the given data using the base64 algorithm.   *   * The boolean argument determines if the encoded data is   * going to be restricted to 76 characters or less per line   * as specified by RFC 2045.  If @p insertLFs is true, then   * there will be 76 characters or less per line.   *   * @param in         data to be encoded.   * @param insertLFs  limit the number of characters per line.   *   * @return           base64 encoded string.   */  static QCString base64Encode( const QByteArray& in, bool insertLFs = false);  /**   * @overload   *   * Same as the above functions except it accepts   * a null terminated string instead an array.   *   * @param str       string to be encoded.   * @param insertLFs limit the number of characters per line.   * @return          decoded string.   */  static QCString base64Encode( const QCString& str, bool insertLFs = false );  /**   * Encodes the given data using the base64 algorithm.   *   * Use this function if you want the result of the encoding   * to be placed in another array which cuts down the number   * of copy operation that have to be performed in the process.   * This is also the preferred method for encoding binary data.   *   * The boolean argument determines if the encoded data is going   * to be restricted to 76 characters or less per line as specified   * by RFC 2045.  If @p insertLFs is true, then there will be 76   * characters or less per line.   *   * NOTE: the output array is first reset and then resized   * appropriately before use, hence, all data stored in the   * output array will be lost.   *   * @param in        data to be encoded.   * @param out       encoded data.   * @param insertLFs limit the number of characters per line.   */  static void base64Encode( const QByteArray& in, QByteArray& out,                            bool insertLFs = false );  /**   * Decodes the given data that was encoded using the   * base64 algorithm.   *   * @param in   data to be decoded.   * @return     decoded string.   */  static QCString base64Decode( const QByteArray& in );  /**   * @overload   *   * Same as the above functions except it accepts   * a null terminated string instead an array.   *   * @param str  string to be decoded.   * @return     decoded string.   */  static QCString base64Decode( const QCString& str );  /**   * Decodes the given data that was encoded with the base64   * algorithm.   *   * Use this function if you want the result of the decoding   * to be placed in another array which cuts down the number   * of copy operation that have to be performed in the process.   * This is also the preferred method for decoding an encoded   * binary data.   *   * NOTE: the output array is first reset and then resized   * appropriately before use, hence, all data stored in the   * output array will be lost.   *   * @param in   data to be decoded.   * @param out  decoded data.   */  static void base64Decode( const QByteArray& in, QByteArray& out );private:  KCodecs();private:  static const char UUEncMap[64];  static const char UUDecMap[128];  static const char Base64EncMap[64];  static const char Base64DecMap[128];  static const char hexChars[16];  static const unsigned int maxQPLineLength;};class KMD5Private;/** * @short An adapted C++ implementation of RSA Data Securities MD5 algorithm. * * The default constructor is designed to provide much the same * functionality as the most commonly used C-implementation, while * the other three constructors are meant to further simplify the * process of obtaining a digest by calculating the result in a * single step. * * KMD5 is state-based, that means you can add new contents with * update() as long as you didn't request the digest value yet. * After the digest value was requested, the object is "finalized" * and you have to call reset() to be able to do another calculation * with it.  The reason for this behavior is that upon requesting * the message digest KMD5 has to pad the received contents up to a * 64 byte boundary to calculate its value. After this operation it * is not possible to resume consuming data.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?