11c1b0f19Sopenharmony_ci/* 21c1b0f19Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 31c1b0f19Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41c1b0f19Sopenharmony_ci * you may not use this file except in compliance with the License. 51c1b0f19Sopenharmony_ci * You may obtain a copy of the License at 61c1b0f19Sopenharmony_ci * 71c1b0f19Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81c1b0f19Sopenharmony_ci * 91c1b0f19Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101c1b0f19Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111c1b0f19Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121c1b0f19Sopenharmony_ci * See the License for the specific language governing permissions and 131c1b0f19Sopenharmony_ci * limitations under the License. 141c1b0f19Sopenharmony_ci */ 151c1b0f19Sopenharmony_ci 161c1b0f19Sopenharmony_ci#include "anonymous_string.h" 171c1b0f19Sopenharmony_ci 181c1b0f19Sopenharmony_ci#include <cstddef> 191c1b0f19Sopenharmony_ci#include <iomanip> 201c1b0f19Sopenharmony_ci#include <random> 211c1b0f19Sopenharmony_ci#include <string> 221c1b0f19Sopenharmony_ci#include <sstream> 231c1b0f19Sopenharmony_ci 241c1b0f19Sopenharmony_ci#include "securec.h" 251c1b0f19Sopenharmony_ci 261c1b0f19Sopenharmony_cinamespace OHOS { 271c1b0f19Sopenharmony_cinamespace DistributedHardware { 281c1b0f19Sopenharmony_ciconstexpr int32_t WORD_WIDTH_8 = 8; 291c1b0f19Sopenharmony_ciconstexpr int32_t WORD_WIDTH_4 = 4; 301c1b0f19Sopenharmony_ci 311c1b0f19Sopenharmony_cistd::string GetRandomID() 321c1b0f19Sopenharmony_ci{ 331c1b0f19Sopenharmony_ci static std::random_device rd; 341c1b0f19Sopenharmony_ci static std::uniform_int_distribution<uint64_t> dist(0ULL, 0xFFFFFFFFFFFFFFFFULL); 351c1b0f19Sopenharmony_ci uint64_t ab = dist(rd); 361c1b0f19Sopenharmony_ci uint64_t cd = dist(rd); 371c1b0f19Sopenharmony_ci uint32_t a, b, c, d; 381c1b0f19Sopenharmony_ci std::stringstream ss; 391c1b0f19Sopenharmony_ci ab = (ab & 0xFFFFFFFFFFFF0FFFULL) | 0x0000000000004000ULL; 401c1b0f19Sopenharmony_ci cd = (cd & 0x3FFFFFFFFFFFFFFFULL) | 0x8000000000000000ULL; 411c1b0f19Sopenharmony_ci a = (ab >> 32U); 421c1b0f19Sopenharmony_ci b = (ab & 0xFFFFFFFFU); 431c1b0f19Sopenharmony_ci c = (cd >> 32U); 441c1b0f19Sopenharmony_ci d = (cd & 0xFFFFFFFFU); 451c1b0f19Sopenharmony_ci ss << std::hex << std::nouppercase << std::setfill('0'); 461c1b0f19Sopenharmony_ci ss << std::setw(WORD_WIDTH_8) << (a); 471c1b0f19Sopenharmony_ci ss << std::setw(WORD_WIDTH_4) << (b >> 16U); 481c1b0f19Sopenharmony_ci ss << std::setw(WORD_WIDTH_4) << (b & 0xFFFFU); 491c1b0f19Sopenharmony_ci ss << std::setw(WORD_WIDTH_4) << (c >> 16U); 501c1b0f19Sopenharmony_ci ss << std::setw(WORD_WIDTH_4) << (c & 0xFFFFU); 511c1b0f19Sopenharmony_ci ss << std::setw(WORD_WIDTH_8) << d; 521c1b0f19Sopenharmony_ci 531c1b0f19Sopenharmony_ci return ss.str(); 541c1b0f19Sopenharmony_ci} 551c1b0f19Sopenharmony_ci 561c1b0f19Sopenharmony_cistd::string GetAnonyString(const std::string &value) 571c1b0f19Sopenharmony_ci{ 581c1b0f19Sopenharmony_ci constexpr size_t INT32_SHORT_ID_LENGTH = 20; 591c1b0f19Sopenharmony_ci constexpr size_t INT32_PLAINTEXT_LENGTH = 4; 601c1b0f19Sopenharmony_ci constexpr size_t INT32_MIN_ID_LENGTH = 3; 611c1b0f19Sopenharmony_ci std::string res; 621c1b0f19Sopenharmony_ci std::string tmpStr("******"); 631c1b0f19Sopenharmony_ci size_t strLen = value.length(); 641c1b0f19Sopenharmony_ci if (strLen < INT32_MIN_ID_LENGTH) { 651c1b0f19Sopenharmony_ci return tmpStr; 661c1b0f19Sopenharmony_ci } 671c1b0f19Sopenharmony_ci 681c1b0f19Sopenharmony_ci if (strLen <= INT32_SHORT_ID_LENGTH) { 691c1b0f19Sopenharmony_ci res += value[0]; 701c1b0f19Sopenharmony_ci res += tmpStr; 711c1b0f19Sopenharmony_ci res += value[strLen - 1]; 721c1b0f19Sopenharmony_ci } else { 731c1b0f19Sopenharmony_ci res.append(value, 0, INT32_PLAINTEXT_LENGTH); 741c1b0f19Sopenharmony_ci res += tmpStr; 751c1b0f19Sopenharmony_ci res.append(value, strLen - INT32_PLAINTEXT_LENGTH, INT32_PLAINTEXT_LENGTH); 761c1b0f19Sopenharmony_ci } 771c1b0f19Sopenharmony_ci 781c1b0f19Sopenharmony_ci return res; 791c1b0f19Sopenharmony_ci} 801c1b0f19Sopenharmony_ci 811c1b0f19Sopenharmony_cistd::string GetAnonyInt32(const int32_t value) 821c1b0f19Sopenharmony_ci{ 831c1b0f19Sopenharmony_ci constexpr int32_t INT32_STRING_LENGTH = 40; 841c1b0f19Sopenharmony_ci char tempBuffer[INT32_STRING_LENGTH] = ""; 851c1b0f19Sopenharmony_ci int32_t secRet = sprintf_s(tempBuffer, INT32_STRING_LENGTH, "%d", value); 861c1b0f19Sopenharmony_ci if (secRet <= 0) { 871c1b0f19Sopenharmony_ci std::string nullString(""); 881c1b0f19Sopenharmony_ci return nullString; 891c1b0f19Sopenharmony_ci } 901c1b0f19Sopenharmony_ci size_t length = strlen(tempBuffer); 911c1b0f19Sopenharmony_ci for (size_t i = 1; i <= length - 1; i++) { 921c1b0f19Sopenharmony_ci tempBuffer[i] = '*'; 931c1b0f19Sopenharmony_ci } 941c1b0f19Sopenharmony_ci if (length == 0x01) { 951c1b0f19Sopenharmony_ci tempBuffer[0] = '*'; 961c1b0f19Sopenharmony_ci } 971c1b0f19Sopenharmony_ci 981c1b0f19Sopenharmony_ci std::string tempString(tempBuffer); 991c1b0f19Sopenharmony_ci return tempString; 1001c1b0f19Sopenharmony_ci} 1011c1b0f19Sopenharmony_ci} // namespace DistributedHardware 1021c1b0f19Sopenharmony_ci} // namespace OHOS 103