AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

All perguntas(coding)

Martin Hope
Andrei Herford
Asked: 2025-04-11 17:24:35 +0800 CST

Como .frame(maxHeight: 100) é calculado quando usado em uma View dentro de uma ScrollView?

  • 5

Resumo: Por que tem Color.red.frame(maxWidth: 500)uma ScrollViewaltura de visualização de pixels? Por que não 500px ou 0px?


Pelo que entendi sobre posicionamento e dimensionamento do SwiftUI, cada visualização é questionada sobre o tamanho desejado. A visualização responde com seus requisitos máximos e a visualização pai lhe dá o máximo de espaço possível.

  • Colorpor padrão usa o máximo de espaço possível.
  • O uso de .frame(maxHeight: x)on Colorlimita isso a x pixels
  • Nos exemplos a seguir, todas as três Colorvisualizações gostariam de ter um maxHeight de 500px. No entanto, como o espaço disponível é menor que 1500px, ele é dividido igualmente entre as visualizações, que são menores:

Exemplo:

var body: some View {
    VStack {
        Color.red
            .frame(maxHeight: 500)
        
        Color.yellow
            .frame(maxHeight: 500)
        
        Color.green
            .frame(maxHeight: 500)
    }
}

insira a descrição da imagem aqui

Mas, ao posicionar as Colorvisualizações dentro de um objeto, ScrollViewelas são renderizadas com uma altura de apenas alguns pixels. Por quê?

Não deveria ScrollViewoferecer altura infinita, o que permitiria que as Colorvisualizações usassem sua altura total de 500px cada?

Ou ele ScrollViewdá o mínimo de espaço possível às suas subvisualizações? Nesse caso, eu entenderia se as Colorvisualizações fossem reduzidas a 0px.

Mas de onde vem essa pequena altura (talvez 10px?)? Como isso é calculado?

var body: some View {
    ScrollView {
        VStack {
            Color.red
                .frame(maxHeight: 500)
            
            Color.yellow
                .frame(maxHeight: 500)
            
            Color.green
                .frame(maxHeight: 500)
        }
    }
}

insira a descrição da imagem aqui

Sei que posso resolver "o problema" usando " frame(height: )em vez disso". No entanto, só quero entender como o SwiftUI calcula a altura neste caso.

  • 1 respostas
  • 39 Views
Martin Hope
Zebrafish
Asked: 2025-04-11 17:12:01 +0800 CST

Se eu criar uma biblioteca estática que chama uma função que não está definida, preciso também compilar ou vincular outra biblioteca ou arquivo?

  • 5

Perguntei a um LLM online e ele disse:

Sim, com certeza. Você precisa vincular à biblioteca de dependências mesmo ao criar uma biblioteca estática que chama funções dentro dela.

Mas tentei construir uma biblioteca estática que chama outra função, e tudo o que fiz foi incluir o cabeçalho e, em seguida, chamar a função. Ela foi construída no Linux com GCC, sem nenhuma reclamação sobre referência indefinida ou algo do tipo.

Digamos:

MinhaBibliotecaEstática:

#include "MyExternalFunction.h"

void my_static_library_function()
{
     MyExternalFunction();
}

O compilado acima funciona bem, sem reclamações do compilador.

Então eu crio um executável, main:

void my_static_library_function();

int main()
{
    my_static_library_function();
    return 0;
}

Vinculei o executável principal à minha biblioteca estática (obviamente, porque chamo a função dela) e ENTÃO ele reclama que MyExternalFunction não está definido, então o EXECUTABLE precisa vincular essa função. Mas não a biblioteca estática. Portanto, a biblioteca estática não precisa vincular as funções que chama. E quanto a outros símbolos, como variáveis? É a mesma coisa? Uma biblioteca estática NUNCA PRECISA vincular nada, ela só precisa de declarações?

O que me levou a perguntar isso é que estou construindo uma biblioteca estática (libcurl) e estou me perguntando se essa biblioteca precisa apenas do diretório include para MBedTLS (o backend da biblioteca SSL) para ser compilada.

c++
  • 1 respostas
  • 100 Views
Martin Hope
Rajat
Asked: 2025-04-11 17:03:03 +0800 CST

captura de inicialização lambda com pacote de parâmetros

  • 7

O código abaixo trava quando o lambda fé chamado.
No entanto, minha expectativa é que, como o pacote de parâmetros é capturado por valor dentro da função "wrapper", ele deveria ter funcionado bem!

Alguém poderia ajudar com o entendimento correto?

void argPrinter(double d, int v, bool b) {
    cout << "argPrinter: " << " " << d  << " " << v << " " << b << endl;
}

template <typename Callable, typename... Args>
auto wrapper(Callable op, Args&&... args) {
    auto result = [&op, args...] () mutable {
         // args... are captured by value.
        cout << "Hello\n";
        op(args...);
    };
    return result;
}

int main() {
    auto f = wrapper(argPrinter, 28.7, -99, true);
   f(); // **SIGSEGV at this call!!**
}
c++
  • 1 respostas
  • 72 Views
Martin Hope
Dominik Kaszewski
Asked: 2025-04-11 16:40:24 +0800 CST

Por que as visualizações de intervalo encadeadas às vezes aumentam de tamanho?

  • 10

Tenho experimentado std::ranges::viewse notado que cada visualização encadeada fica maior. Para iteradores de visualização, esse padrão é simples: cada um é sempre 8 bytes maior que o anterior. Mas para as visualizações em si, o transformtamanho não aumenta em nada, mas filteraumenta em uma quantidade que não consigo entender. No MSVC, esse padrão é um pouco diferente, mas ainda imprevisível para mim.

Código de teste:

#include <iostream>
#include <ranges>
#include <string>

int main() {
    static constexpr auto printed = [](auto&& v) {
        std::cout << "sizeof(v): " << sizeof(v) << ", ";
        std::cout << "sizeof(it): " << sizeof(v.begin()) << ", ";
        std::cout << "values: { ";
        for (auto&& x : v) {
            std::cout << x << ", ";
        }
        std::cout << "}\n";
        return v;
    };

    using namespace std::ranges::views;
    auto hundred = printed(iota(0ull, 100ull));
    auto small = printed(hundred | filter([](auto i) { return i < 50; }));
    auto times_seven = printed(small | transform([](auto i) { return i * 7; }));
    auto even = printed(times_seven | filter([](auto i) { return i % 2 == 0; }));
    auto as_string = printed(even | transform([](auto i) { return std::to_string(i); }));
    auto no_twos = printed(as_string | filter([](auto s) { return s.find('2') == s.npos; }));
}

Execute-o no GodBolt

Resultados:

visualizar tamanho(dele) delta sizeof(visualização), GCC/Clang delta sizeof(visualização), MSVC delta
iota 8 16 16
filtro 16 8 32 16 48 32
transformar 24 8 32 0 64 16
filtro 32 8 64 32 112 48
transformar 40 8 64 0 128 16
filtro 48 8 112 48 192 64

Meu código não se importa muito com o tamanho das visualizações, já que elas nunca são armazenadas em lugar nenhum. Só estou me perguntando por que elas não podem ser constantes, dependendo apenas do tamanho do lambda (aqui sempre vazio). Tentei analisar o código-fonte, mas acho muito difícil de ler com todas as camadas de classes base, especialização de modelos e restrições de conceitos.

c++
  • 1 respostas
  • 107 Views
Martin Hope
K i
Asked: 2025-04-11 16:35:35 +0800 CST

Tipo condicional para retorno Axios com base em argumentos de função

  • 4

A função axiosGet:

export const axiosGet = async <TData>({
    url,
    params = {},
    onDone,
    onError
}: TypeAxiosArgs<TData>) => {
    
    try {
        const r = await axios.get<TypeAxiosData<TData, typeof params.paginate>>(url, { params })
        let ret
        if (params?.paginate) {
            ret = r.data
        } else {
            ret = r.data.data // <--- causing typescript to scream, check below
        }
        onDone?.(ret)
        return ret
    } catch (e) {
        console.error(e)
        onError?.(e)
    }
}

Os tipos:

export type TypeAxiosArgs<TData> = {
    url: string
    params?: { paginate?: number } & Record<string, any>
    onDone?: (response: TypeAxiosData<TData, undefined>) => void
    onError?: (error: any) => void
}

export type TypeAxiosData<
    TData,
    TPaginate extends number | undefined
> = TPaginate extends undefined
    ? TData
    : {
            data: TData
            meta: {
                from: number
                to: number
                total: number
                last_page: number
            }
      }

Estou recebendo um erro r.data.datase params.paginatefor indefinido

Property 'data' does not exist on type 'TypeAxiosData<TData, number | undefined>'.
  Property 'data' does not exist on type 'TData'.ts(2339)

Sinto que o problema está no axios.getgenérico, que precisa ser algo diferente, mas não consigo descobrir o quê.

Editar: TypeAxiosData corrigido e tentativa de conversão manual.

export const axiosGet = async <TData>({
    url,
    params = {},
    onDone,
    onError
}: TypeAxiosArgs<TData>) => {
    
    try {
        const r = await axios.get<TypeAxiosData<TData, typeof params.paginate>>(url, { params })
        let ret
        if (params?.paginate) {
            ret = r.data as TypeAxiosData<TData, number>
        } else {
            ret = r.data.data as TypeAxiosData<TData, undefined>
        }
        onDone?.(ret)
        return ret
    } catch (e) {
        console.error(e)
        onError?.(e)
    }
}
axiosGet<{ id: number, name: string }>({ url: "", params: { paginate: undefined } })
    .then((result) => {})

O problema que estou tendo é que o tipo de resultado está sendo declarado como:

(parameter) result: {
    id: number;
    name: string;
} | {
    data: {
        id: number;
        name: string;
    };
    meta: {
        from: number;
        to: number;
        total: number;
        last_page: number;
    };
} | undefined

Em vez de:

(parameter) result: {
    id: number;
    name: string;
} | undefined
typescript
  • 1 respostas
  • 24 Views
Martin Hope
코딩마스터
Asked: 2025-04-11 16:22:33 +0800 CST

Como criar uma grade nxn de blocos com dimensões de contêiner fixas usando CSS flexbox?

  • 5

Estou tentando criar uma grade nxn de blocos que caibam em um contêiner fixo (800px x 700px). Consegui gerar o número correto de blocos usando JavaScript, mas estou com dificuldades para alinhá-los perfeitamente no contêiner usando CSS.

Cada bloco deve ser redimensionado automaticamente para que todos os blocos n² caibam exatamente no contêiner sem transbordar, e eles devem formar um layout de grade perfeito.

Aqui está meu código atual:

const btn = document.createElement("button");
const body = document.querySelector("body");
body.appendChild(btn);
btn.className = "button";
btn.textContent = "button";

const container = document.createElement("div");
container.className = "container";
body.appendChild(container);

btn.addEventListener("click", () => {
  let select = Number(prompt("수 입력: "));
  container.innerHTML = ""; // clear existing boxes

  for (let i = 0; i < select * select; i++) {
    const div = document.createElement("div");
    div.className = "box";
    div.style.width = `calc(800px / ${select})`;
    div.style.height = `calc(700px / ${select})`;
    container.appendChild(div);
  }
});
*::after,
*::before {
  box-sizing: border-box;
}

* {
  margin: 0;
  padding: 0;
}

html,
body {
  height: 100%;
}

body {
  display: flex;
  justify-content: center;
  align-items: center;
}

.container {
  width: 800px;
  height: 700px;
  border: 3px solid black;
  overflow: hidden;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}

.box {
  border: 1px solid black;
}

html
  • 2 respostas
  • 53 Views
Martin Hope
Matteo
Asked: 2025-04-11 16:22:05 +0800 CST

determinar a posição de uma string inserida dentro de outra

  • 6

Após esta postagem, consegui montar uma pequena função para colocar dentro de um corpo de texto maior (FASTA) strings mais curtas determinadas de outro arquivo com base em algumas condições ( por exemplo, 100 eventos de um subconjunto de apenas 400 a 500 caracteres de comprimento e selecionados aleatoriamente).

Agora, estou satisfeito com o resultado; no entanto, desejo imprimir exatamente onde esses 100 eventos foram adicionados no corpo de texto maior — idealmente, posição inicial-final, se não for muito difícil.

Acho que isso poderia ser integrado get_retro_text()ou, se for mais fácil, criado como uma função externa, mas não consigo descobrir por onde começar... qualquer ajuda é muito apreciada, obrigado antecipadamente!

###library import
from Bio import SeqIO
import random

###string import and wrangling
input_file = open("homo_sapiens_strings.fasta.txt")
my_dict = SeqIO.to_dict(SeqIO.parse(input_file, "fasta"))

s = []
for j in my_dict.values():
   s.append(j)

###import FASTA --> some already made function I found to import and print whole FASTA genomes but testing on a part of it
def fasta_reader(filename):
  from Bio.SeqIO.FastaIO import FastaIterator
  with open(filename) as handle:
    for record in FastaIterator(handle):
      yield record

head = ""
body = ""
for entry in fasta_reader("hg37_chr1.fna"):
  head = str(entry.id)
  body = str(entry.seq)

###randomly selects 100 sequences and adds them to the FASTA
def insert (source_str, insert_str, pos):
    return source_str[:pos] + insert_str + source_str[pos:]

def get_retro_text(genome, all_strings):
    string_of_choice = [string for string in all_strings if 400 < len(string) < 500]
    hundred_strings = random.sample(string_of_choice, k=100)

    text_of_strings = []
    for k in range(len(hundred_strings)):
        text_of_strings.append(str(hundred_strings[k].seq))

    single_string = ",".join(text_of_strings)
    new_genome = insert(genome, single_string, random.randint(0, len(genome)))
    
    return new_genome

big_genome = get_retro_text(body, s)

EDIT exemplo de estrutura de bodyes

body


NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNtaaccctaaccctaacccta
accctaaccctaaccctaaccctaaccctaaccctaaccctaaccctaaccctaacccta
accctaaccctaaccctaaccctaacccaaccctaaccctaaccctaaccctaaccctaa
ccctaacccctaaccctaaccctaaccctaaccctaacctaaccctaaccctaaccctaa
ccctaaccctaaccctaaccctaaccctaacccctaaccctaaccctaaaccctaaaccc
taaccctaaccctaaccctaaccctaaccccaaccccaaccccaaccccaaccccaaccc
caaccctaacccctaaccctaaccctaaccctaccctaaccctaaccctaaccctaaccc
taaccctaacccctaacccctaaccctaaccctaaccctaaccctaaccctaaccctaac
ccctaaccctaaccctaaccctaaccctcgCGGTACCCTCAGCCGGCCCGCCCGCCCGGG
TCTGACCTGAGGAGAACTGTGCTCCGCCTTCAGAGTACCACCGAAATCTGTGCAGAGGAc
aacgcagctccgccctcgcggtGCTCtccgggtctgtgctgaggagaacgCAACTCCGCC
GTTGCAAAGGCGcgccgcgccggcgcaggcgcagagaggcgcgccgcgccggcgcaggcg
cagagaggcgcgccgcgccggcgcaggcgcagagaggcgcgccgcgccggcgcaggcgca
gagaggcgcgccgcgccggcgcaggcgcagagaggcgcgccgcgccggcgcaggcgcaga
caCATGCTAGCGCGTCGGGGTGGAGGCgtggcgcaggcgcagagaggcgcgccgcgccgg
cgcaggcgcagagacaCATGCTACCGCGTCCAGGGGTGGAGGCgtggcgcaggcgcagag
aggcgcaccgcgccggcgcaggcgcagagacaCATGCTAGCGCGTCCAGGGGTGGAGGCG
TggcgcaggcgcagagacgcAAGCCTAcgggcgggggttgggggggcgTGTGTTGCAGGA
GCAAAGTCGCACGGCGCCGGGCTGGGGCGGGGGGAGGGTGGCGCCGTGCACGCGCAGAAA
CTCACGTCACGGTGGCGCGGCGCAGAGACGGGTAGAACCTCAGTAATCCGAAAAGCCGGG
ATCGACCGCCCCTTGCTTGCAGCCGGGCACTACAGGACCCGCTTGCTCACGGTGCTGTGC
CAGGGCGCCCCCTGCTGGCGACTAGGGCAACTGCAGGGCTCTCTTGCTTAGAGTGGTGGC
CAGCGCCCCCTGCTGGCGCCGGGGCACTGCAGGGCCCTCTTGCTTACTGTATAGTGGTGG
CACGCCGCCTGCTGGCAGCTAGGGACATTGCAGGGTCCTCTTGCTCAAGGTGTAGTGGCA
GCACGCCCACCTGCTGGCAGCTGGGGACACTGCCGGGCCCTCTTGCTCCAACAGTACTGG
CGGATTATAGGGAAACACCCGGAGCATATGCTGTTTGGTCTCAGTAGACTCCTAAATATG
GGATTCCTgggtttaaaagtaaaaaataaatatgtttaatttgtGAACTGATTACCATCA
GAATTGTACTGTTCTGTATCCCACCAGCAATGTCTAGGAATGCCTGTTTCTCCACAAAGT
GTTtacttttggatttttgccagTCTAACAGGTGAAGCCCTGGAGATTCTTATTAGTGAT
TTGGGCTGGGGCCTGgccatgtgtatttttttaaatttccactgaTGATTTTGCTGCATG
GCCGGTGTTGAGAATGACTGCGCAAATTTGCCGGATTTCCTTTGCTGTTCCTGCATGTAG
TTTAAACGAGATTGCCAGCACCGGGTATCATTCACCATTTTTCTTTTCGTTAACTTGCCG
TCAGCCTTTTCTTTGACCTCTTCTTTCTGTTCATGTGTATTTGCTGTCTCTTAGCCCAGA
CTTCCCGTGTCCTTTCCACCGGGCCTTTGAGAGGTCACAGGGTCTTGATGCTGTGGTCTT
CATCTGCAGGTGTCTGACTTCCAGCAACTGCTGGCCTGTGCCAGGGTGCAAGCTGAGCAC
TGGAGTGGAGTTTTCCTGTGGAGAGGAGCCATGCCTAGAGTGGGATGGGCCATTGTTCAT

s

[[SeqRecord(seq=Seq('ATGGCGGGACACCCGAAAGAGAGGGTGGTCACAGATGAGGTCCATCAGAACCAG...TAG'), id='retro_hsap_1', name='retro_hsap_1', description='retro_hsap_1', dbxrefs=[]), SeqRecord(seq=Seq('ATGGTCAACGTACCTAAAACCCGAAGAACCTTCTGTAAGAAGTGTGGCAAGCAT...TAA'), id='retro_hsap_2', name='retro_hsap_2', description='retro_hsap_2', dbxrefs=[]), SeqRecord(seq=Seq('ATGTCCACAATGGGAAACGAGGCCAGTTACCCGGCGGAGATGTGCTCCCACTTT...TGA'), id='retro_hsap_3', name='retro_hsap_3', description='retro_hsap_3', dbxrefs=[])]]
python
  • 1 respostas
  • 55 Views
Martin Hope
hope
Asked: 2025-04-11 16:17:24 +0800 CST

Função Regex para corresponder a variantes irregulares de strings contendo um ou mais separadores entre cada caractere

  • 5

Estou procurando uma função regex que corresponda exatamente a essas variantes de "SA..." (SAC, SAD, SAE, SAP, SAW, SAAC, SAAN, SAAS, SABE, SABW ), mas sem diferenciar maiúsculas de minúsculas.
O problema é que pode haver um ou mais separadores (espaço, barra invertida /, ponto, hífen -) entre cada caractere de cada palavra, por exemplo, "S /AC", "SA.P", "S / AB W".
Acabei com o padrão abaixo; sim, funciona, mas é feio e muito longo!
Existe um melhor e mais compacto?

Option Explicit
Option Compare Text

Function MatchSAWord(ByVal inputText As String) As Boolean
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
   
    Dim sep As String, pat As String
   
    sep = "[ .\/-]*"
       
    pat = "\b(" & _
        "S" & sep & "A" & sep & "C" & "|" & _
        "S" & sep & "A" & sep & "D" & "|" & _
        "S" & sep & "A" & sep & "E" & "|" & _
        "S" & sep & "A" & sep & "P" & "|" & _
        "S" & sep & "A" & sep & "W" & "|" & _
        "S" & sep & "A" & sep & "A" & sep & "C" & "|" & _
        "S" & sep & "A" & sep & "A" & sep & "N" & "|" & _
        "S" & sep & "A" & sep & "A" & sep & "S" & "|" & _
        "S" & sep & "A" & sep & "B" & sep & "E" & "|" & _
        "S" & sep & "A" & sep & "B" & sep & "W" & _
        ")\b"
       
    With regex
        .Global = False
        .IgnoreCase = True
        .pattern = pat
    End With
    MatchSAWord = regex.Test(inputText)
End Function
regex
  • 1 respostas
  • 47 Views
Martin Hope
Saurav Padhy
Asked: 2025-04-11 15:57:33 +0800 CST

Como referenciar UID dinamicamente no painel do Grafana via Terraform?

  • 6

Código TF de exemplo

data "grafana_data_source" "azure_monitor" {
  name = "grafana-azure-monitor-datasource"

resource "grafana_dashboard" "test" {
  folder      = grafana_folder.rule_folder.uid
  config_json = file("${path.module}/VMDASHBOARD.json")
}

Mas aqui o problema é que quando eu faço referência ao uid dentro do arquivo json

VMDASHBOARD.json

uid: ${data.grafana_data_source.azure_monitor.uid}

não está sendo executado dinamicamente e mostrando uid ilegal

terraform
  • 1 respostas
  • 25 Views
Martin Hope
RobinGFT
Asked: 2025-04-11 15:42:58 +0800 CST

Correspondência de derivação de chave com Scrypt em node.js e c#

  • 6

Tenho uma aplicação Node.js com acesso a banco de dados. A string de conexão é obtida de um arquivo JSON e a parte da senha dentro da string de conexão contém salt, nonce e a cifra, que é criptografada por AES-GCM. O segredo para criptografar + descriptografar a senha usa uma derivação de chave do SCrypt dentro da biblioteca interna de criptografia do Node.js. Até agora, tudo bem, a criptografia e a descriptografia funcionam perfeitamente.

Entretanto, para outro caso de uso, tenho que usar essa string de conexão agora de um aplicativo C# e não consigo descriptografar a string de senha.

O método falha com o seguinte erro:

A tag de autenticação computada não corresponde à tag de autenticação de entrada

Já rastreei a derivação da chave. Não consegui encontrar uma implementação .NET que correspondesse à derivação da chave do nodejs.

Aqui está meu código - Node.js:

decrypt(encryptedText) {
    const decoded = Buffer.from(encryptedText, "base64").toString("utf8");
    const [saltHex, ivHex, authTagHex, encryptedHex] = decoded.split(":");
    const salt = Buffer.from(saltHex, "hex");
    const secretByte = Buffer.from(this.secretKey, "utf-8");
    const key = crypto.scryptSync(salt, secretByte, 32, { cost: 16384, blockSize: 8, parallelization: 1 });
    const iv = Buffer.from(ivHex, "hex");
    const authTag = Buffer.from(authTagHex, "hex");
    const decipher = crypto.createDecipheriv("aes-256-gcm", key, iv);
    decipher.setAuthTag(authTag);
    let decrypted = decipher.update(encryptedHex, "hex", "utf8");
    decrypted += decipher.final("utf8");
    return decrypted;
}

Código C#:

public static String DecryptAESGCM(Dictionary<string, byte[]> encrypted, string secret)
{
    byte[] secretByte = Encoding.UTF8.GetBytes(secret);

    //clsLogger.Log(Encoding.UTF8.GetString(encrypted.GetValueOrDefault("salt")), enumLogLevel.INFO);

    // Derive key
    byte[] derivedKey = SCrypt.ComputeDerivedKey(secretByte, encrypted.GetValueOrDefault("salt"), 16384, 8, 1, 1, 32);

    using (AesGcm aes = new AesGcm(derivedKey, encrypted.GetValueOrDefault("tag").Length))
    {
        byte[] plainText = new byte[encrypted.GetValueOrDefault("cipher").Length];
        aes.Decrypt(encrypted.GetValueOrDefault("nonce"), encrypted.GetValueOrDefault("cipher"), encrypted.GetValueOrDefault("tag"), plainText);

        return Encoding.UTF8.GetString(plainText);
    }
}

O dicionário em C# é um armazenamento de valor-chave com byte[]salt, nonce, tag e cifra.

Já tentei várias bibliotecas diferentes para reproduzir a chave derivada e garanti que salt e secret tenham os mesmos valores em node.js e c# antes da função ser chamada, mas as chaves derivadas são sempre diferentes.

Alguém teve um caso semelhante e conseguiu resolver ou tem alguma ideia de como?

Obrigado antecipadamente!
Robin

c#
  • 1 respostas
  • 58 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve