标题:我想做一个md5批量加密的软件,谁可以做要批量加密的
只看楼主
textboy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-4-20
结帖率:0
已结贴  问题点数:20 回复次数:5 
我想做一个md5批量加密的软件,谁可以做要批量加密的
我有好多文本需要加密成md5,每个文本的都是数字和字符串一行一个,现在需要一个md5加密工具加密成这样的格式,
51251251|ee2a5c3c8996415f|a324cc1eee2a5c3c8996415f572867df|md5
前面是明文后面是16为还有32位最后是加密方式,谁可以帮我写个小工具批量加密生成成这样的格式 大神可以做的联系我有红包qq2429282227
搜索更多相关主题的帖子: 加密 工具 软件 批量 md5 
2021-04-20 14:51
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
C++ 比较简单
用到了 windows APIs,否则你自己去网上找个开源的MD5

程序代码:
#include <string>
#include <optional>
#include <stdexcept>
#include <windows.h>

class MD5
{
public:
    MD5()
    {
        if( !CryptAcquireContext(&hProv_,nullptr,nullptr,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT) )
            throw std::runtime_error("failed to invoke CryptAcquireContext.");
    }
    ~MD5()
    {
        if( hProv_ )
            CryptReleaseContext(hProv_,0);
    }
    MD5( const MD5& ) = delete;
    MD5( MD5&& ) = default;
    MD5& operator=( const MD5& ) = delete;
    MD5& operator=( MD5&& ) = default;

    std::optional<std::string> operator()( const std::string& s ) const
    {
        HCRYPTPROV hHash = 0;
        if( !CryptCreateHash(hProv_,CALG_MD5,0,0,&hHash) )
            return {};

        BYTE buf[16];
        if( !CryptHashData(hHash,(const BYTE*)s.c_str(),s.size(),0) )
            return {};

        DWORD dwHashLen = sizeof(buf);
        if( !CryptGetHashParam(hHash,HP_HASHVAL,buf,&dwHashLen,0) )
            return {};

        CryptDestroyHash(hHash);

        std::string result( 2*sizeof(buf), ' ' );
        for( size_t i=0; i!=std::size(buf); ++i )
        {
            result[2*i+0] = "0123456789abcdef"[buf[i]/0x10];
            result[2*i+1] = "0123456789abcdef"[buf[i]%0x10];
        }
        return result;
    }

private:
    HCRYPTPROV hProv_ = 0;
};

#include <iostream>
#include <fstream>
using namespace std;

int main( void )
{
    const char* src = R"(D:\source\vc2017\cpp001\src.txt)";
    const char* dst = R"(D:\source\vc2017\cpp001\dst.txt)";

    ifstream is(src);
    if( !is )
        return false;

    ofstream os(dst);
    if( !is )
        return false;

    MD5 md5;
    for( string line; getline(is,line); )
    {
        if( line.empty() )
            os << '\n';
        else
        {
            auto m = md5(line).value();
            os << line << '|' << m.substr(8,16) << '|' << m << "|md5\n";
        }
    }
}


[此贴子已经被作者于2021-4-20 16:38编辑过]

2021-04-20 16:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
C语言,省略掉了所有错误检查

程序代码:
#include <windows.h>

#include <stdio.h>
#include <string.h>

int main( void )
{
    const char* src = "D:\\source\\vc2017\\cpp001\\src.txt";
    const char* dst = "D:\\source\\vc2017\\cpp001\\dst.txt";

    HCRYPTPROV hProv = 0;
    CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);

    FILE* fin = fopen( src, "rt" );
    FILE* fout = fopen( dst, "wt" );

    HCRYPTPROV hHash = 0;
    CryptCreateHash(hProv,CALG_MD5,0,0,&hHash);

    for( char buf[1024]; fgets(buf,sizeof(buf),fin); )
    {
        char* p = strchr(buf,'\n');
        if( p || feof(fin) )
        {
            CryptHashData(hHash,(const BYTE*)buf,p-buf,0);
            fprintf( fout, "%.*s", p-buf, buf );

            BYTE buf[16];
            DWORD dwHashLen = sizeof(buf);
            CryptGetHashParam(hHash,HP_HASHVAL,buf,&dwHashLen,0);
            CryptDestroyHash(hHash);
            CryptCreateHash(hProv,CALG_MD5,0,0,&hHash);
            fprintf( fout, "|" );
            for( size_t i=4; i!=12; ++i )
                fprintf( fout, "%02x", buf[i] );
            fprintf( fout, "|" );
            for( size_t i=0; i!=sizeof(buf); ++i )
                fprintf( fout, "%02x", buf[i] );
            fprintf( fout, "|md5\n" );
        }
        else
        {
            CryptHashData(hHash,(const BYTE*)buf,sizeof(buf),0);
            fprintf( fout, "%s", buf );
        }
    }

    fclose( fout );
    fclose( fin );

    CryptReleaseContext(hProv,0);
}
2021-04-20 17:01
textboy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-4-20
得分:0 
有个加了我用易语言写了个给,我给了150元红包他写出来的加密程序慢的狗一样,今天运气不好倒霉的很
2021-04-20 20:15
mindfulness
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:27
专家分:110
注 册:2021-5-8
得分:0 
回复 2楼 rjsp
MD5不是摘要算法吗? 本身具有信息丢失,何来解密之说?
我们常说的MD5解密,不是指摘要的有效碰撞吗?
一般所谓的破解应该只是有一个明文和摘要库,也不存在真正的解密吧。

/*
*  Simple love, simple C.
*/
2021-05-08 16:38
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 5楼 mindfulness
你说得对,md5不是加密
2021-05-09 14:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505515-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017381 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved