简单的加密系统c/c++[伪hash求看,点进来也可以QAQ]

本文介绍了一个基于模运算的简单加密系统,通过两次伪hash运算生成两串秘钥,以减少数字重复。在解码过程中遇到秘钥长度不一致的问题,作者计划用一个字符表示后续长度。文章附带了加密和暴力解密的代码,并诚邀大佬指正。
摘要由CSDN通过智能技术生成

简单的加密系统c/c++

下面是一个基于模运算【%】的加密系统,大致是这样的
先搞出来4个大数(下面的例子是八位的数字)其实他本身的是否为质数不用考虑

#define h 37301231
#define u 30724313
#define s 70654554
#define o 98745554

现在,再定义一个需要加密的数在longlong范围内,否则要加高精度模运算或者加法【等回来更新】
进行如下运算

a*=h;a%=u;

但是这里面就用到两个数字啊?而且会有大量相同的重复,解码就存在问题了,所以

long long b=a;
b*=s;b%=o;

这样子就对一个数进行了两次的伪hash加密,同时得到~~两串秘钥~~ ,来确定一个数字也有可能会有重复,但应该也在long long 范围之外了
但是基于该程序的漏洞,秘钥长度不相同,难以合成所以我决定用一个字符来表示后边的长度
在这里插入图片描述
这里a就是加密的数字,而This is the first keys所指的即为第一次的秘钥,第二个就是标志长度的的字符,这里出了点问题输出的是 ` 的符号,
不过不要在意那些细节
下面就是暴力解码,就是那个ans is:100031708,下面是暴力解的代码

int qiu(long long a,long long b){
   
	int sum=0;
	for(long long i=0;i<=N;i++){
   
		if(((i%h)*u==a)&&((i%s)*o==b)){
   
			cout<<i;
//			break;
		}
	}
}

N是一个常数

#define N 102040000

那么上全部的代码吧,有两种版本的

#include<bits/stdc++.h>
#include<windows.h>
#define h 37301231
#define u 30724313
#define s
好的,我可以为您提供一个基于SimHash算法C++程序相似性检测系统的代码实现。SimHash算法是一种快速的文本相似性度量算法,它可以将文本表示成一个固定长度的二进制向量,并通过计算两个文本的哈希值的汉明距离来衡量它们的相似度。以下是代码实现: ```c++ #include <iostream> #include <string> #include <vector> #include <bitset> #include <algorithm> using namespace std; const int HASH_BITS = 64; // 定义哈希值的位数 const int K_GRAMS = 3; // 定义k-gram的长度 // 将一个字符串分成k-gram,并返回每个k-gram的哈希值 vector<uint64_t> getKGramHash(const string &s) { vector<uint64_t> hashes; for (int i = 0; i <= s.length() - K_GRAMS; i++) { uint64_t hash = 0; for (int j = 0; j < K_GRAMS; j++) { hash = (hash << 8) | s[i + j]; } hashes.push_back(hash); } return hashes; } // 计算SimHash值 bitset<HASH_BITS> getSimHash(const vector<uint64_t> &hashes) { vector<int> bits(HASH_BITS, 0); for (uint64_t hash : hashes) { for (int i = 0; i < HASH_BITS; i++) { if (hash & (1ull << i)) { bits[i]++; } else { bits[i]--; } } } bitset<HASH_BITS> simHash; for (int i = 0; i < HASH_BITS; i++) { simHash[i] = (bits[i] > 0); } return simHash; } // 计算两个SimHash值的汉明距离 int hammingDistance(const bitset<HASH_BITS> &a, const bitset<HASH_BITS> &b) { return (a ^ b).count(); } // 计算两个字符串的相似度 double similarity(const string &a, const string &b) { vector<uint64_t> aHashes = getKGramHash(a); vector<uint64_t> bHashes = getKGramHash(b); bitset<HASH_BITS> aSimHash = getSimHash(aHashes); bitset<HASH_BITS> bSimHash = getSimHash(bHashes); int distance = hammingDistance(aSimHash, bSimHash); return 100.0 - (double) distance * 100.0 / (double) HASH_BITS; } int main() { string a = "hello world"; string b = "hello world!"; string c = "goodbye world"; double similarityAB = similarity(a, b); double similarityAC = similarity(a, c); cout << "The similarity between a and b is: " << similarityAB << "%" << endl; cout << "The similarity between a and c is: " << similarityAC << "%" << endl; return 0; } ``` 这段代码实现了一个简单C++程序相似性检测系统。它首先将输入的两个字符串分成k-gram,然后计算它们的SimHash值,并求出其汉明距离,最后用汉明距离计算相似度。您可以根据需要修改K_GRAMS和HASH_BITS的值来调整k-gram的长度和哈希值的位数,以达到更好的检测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值