Python实现128位加密种子算法解析

需积分: 21 0 下载量 107 浏览量 更新于2024-11-29 收藏 10KB ZIP 举报
资源摘要信息:"python_seed128:Python种子_128" Python中种子的使用通常与随机数生成有关,但在这个上下文中,它似乎是指一个特定的加密操作,参考了KISA(韩国互联网安全机构)提供的seed128算法。seed128算法是一种块加密算法,用于将明文转换为密文,其密钥长度为128位(即16字节)。这种算法可能用于数据加密、身份验证、API通信等场景,以保证数据传输的安全性和机密性。 Python的加密模块提供了实现各种加密算法的接口,包括对称加密、非对称加密、散列函数等。在这个文件中,作者使用了Python的openSSL包装器来实现seed128算法。openSSL是一个广泛使用的加密库,支持多种加密协议和算法,Python通过其扩展库pyOpenSSL提供了对openSSL的接口。 该Python文件实现的是将16位的明文(假设指的是16个字符的字符串)转换为16位的复杂文本,即密文。在加密过程中,如果明文不足16位,会添加\x00(空字节)来填充,以确保明文长度达到16字节。这样的填充是为了满足块加密算法需要固定大小的块作为输入的要求。 在API通信中,明文通常需要先转换为特定的字节流格式。在这个文件中,提到的是先将明文转换为utf-16编码格式,然后再编码为utf-8发送。这种做法有助于确保在不同编码系统间传输的文本能够被正确地理解和解码。utf-16编码使用两个字节表示一个字符,范围从\x0000到\xFFFF,这样的编码可以容纳大部分字符集。而utf-8编码是一种变长的编码方式,能够表示更大范围的字符,并且在互联网上被广泛使用。 需要注意的是,这里提到的“16位密钥”并不是指在API通信中使用的编码格式,而是seed128加密算法所使用的密钥长度。加密算法的安全性很大程度上取决于密钥的长度和复杂性。在实际应用中,密钥管理是一个重要的安全话题,密钥需要安全地生成、存储、传输和销毁。 尽管文档中提到了“Java”标签,但从描述来看,这个Python文件与Java语言无直接关联。可能的解释是这个Python文件实现了一个与Java中某些安全机制相似的加密过程,或者这个文件是与Java程序配合使用的,但这需要更多的上下文信息来确定。 最后,文件名称列表中的“python_seed128-master”暗示这是一个Git项目仓库的名称,通常表示主分支或主版本。而“master”通常表示主分支,但在现代Git项目中,更倾向于使用“main”作为默认分支的名称,以避免一些不敏感的话题。这可能是该文件的历史遗留问题,或者来自一个未更新分支命名习惯的项目。

# seeds = [2222, 5, 4, 2, 209, 4096, 2048, 1024, 2015, 1015, 820]#11 seeds = [2]#2 num_model_seed = 1 oof = np.zeros(X_train.shape[0]) prediction = np.zeros(X_test.shape[0]) feat_imp_df = pd.DataFrame({'feats': feature_name, 'imp': 0}) parameters = { 'learning_rate': 0.008, 'boosting_type': 'gbdt', 'objective': 'binary', 'metric': 'auc', 'num_leaves': 63, 'feature_fraction': 0.8,#原来0.8 'bagging_fraction': 0.8, 'bagging_freq': 5,#5 'seed': 2, 'bagging_seed': 1, 'feature_fraction_seed': 7, 'min_data_in_leaf': 20, 'verbose': -1, 'n_jobs':4 } fold = 5 for model_seed in range(num_model_seed): print(seeds[model_seed],"--------------------------------------------------------------------------------------------") oof_cat = np.zeros(X_train.shape[0]) prediction_cat = np.zeros(X_test.shape[0]) skf = StratifiedKFold(n_splits=fold, random_state=seeds[model_seed], shuffle=True) for index, (train_index, test_index) in enumerate(skf.split(X_train, y)): train_x, test_x, train_y, test_y = X_train[feature_name].iloc[train_index], X_train[feature_name].iloc[test_index], y.iloc[train_index], y.iloc[test_index] dtrain = lgb.Dataset(train_x, label=train_y) dval = lgb.Dataset(test_x, label=test_y) lgb_model = lgb.train( parameters, dtrain, num_boost_round=10000, valid_sets=[dval], early_stopping_rounds=100, verbose_eval=100, ) oof_cat[test_index] += lgb_model.predict(test_x,num_iteration=lgb_model.best_iteration) prediction_cat += lgb_model.predict(X_test,num_iteration=lgb_model.best_iteration) / fold feat_imp_df['imp'] += lgb_model.feature_importance() del train_x del test_x del train_y del test_y del lgb_model oof += oof_cat / num_model_seed prediction += prediction_cat / num_model_seed gc.collect()解释上面的python代码

2023-05-15 上传

def build_sequences(text, window_size): #text:list of capacity x, y = [],[] for i in range(len(text) - window_size): sequence = text[i:i+window_size] target = text[i+1:i+1+window_size] x.append(sequence) y.append(target) return np.array(x), np.array(y) # 留一评估:一组数据为测试集,其他所有数据全部拿来训练 def get_train_test(data_dict, name, window_size=8): data_sequence=data_dict[name][1] train_data, test_data = data_sequence[:window_size+1], data_sequence[window_size+1:] train_x, train_y = build_sequences(text=train_data, window_size=window_size) for k, v in data_dict.items(): if k != name: data_x, data_y = build_sequences(text=v[1], window_size=window_size) train_x, train_y = np.r_[train_x, data_x], np.r_[train_y, data_y] return train_x, train_y, list(train_data), list(test_data) def relative_error(y_test, y_predict, threshold): true_re, pred_re = len(y_test), 0 for i in range(len(y_test)-1): if y_test[i] <= threshold >= y_test[i+1]: true_re = i - 1 break for i in range(len(y_predict)-1): if y_predict[i] <= threshold: pred_re = i - 1 break return abs(true_re - pred_re)/true_re def evaluation(y_test, y_predict): mae = mean_absolute_error(y_test, y_predict) mse = mean_squared_error(y_test, y_predict) rmse = sqrt(mean_squared_error(y_test, y_predict)) return mae, rmse def setup_seed(seed): np.random.seed(seed) # Numpy module. random.seed(seed) # Python random module. os.environ['PYTHONHASHSEED'] = str(seed) # 为了禁止hash随机化,使得实验可复现。 torch.manual_seed(seed) # 为CPU设置随机种子 if torch.cuda.is_available(): torch.cuda.manual_seed(seed) # 为当前GPU设置随机种子 torch.cuda.manual_seed_all(seed) # if you are using multi-GPU,为所有GPU设置随机种子 torch.backends.cudnn.benchmark = False torch.backends.cudnn.deterministic = True

2023-05-31 上传