none
Odernar campo criptografado RRS feed

  • Pergunta

  • Boa tarde a todos,

    Tenho um banco criptografado usando uma criptografia que trabalho com a tabela asc, add 128 ou retiro 128.

    Todos os meus campos são do tipo texto.

    Estou precisando ordenar um campo que na verdade é numerio para poder exibir os dados na ordem correta, como posso fazer isto?

    pois se uso o order by no campo ele coloca em uma ordenação maluca.

    teria como ordernar baseado na tabela ascii?
    quarta-feira, 8 de agosto de 2007 20:43

Todas as Respostas

  •  

    Olá Charles,

     

    Você não teria como ordenar pelo dado descriptografado?? Ou seja, reveter o dado para fazer a ordenação???

     

     

    Abraço.

    quinta-feira, 9 de agosto de 2007 04:16
  • este campo e um numero armazenado em um campo char ou varchar ? da para converter para numeric tente

     

    select ... from ... order by convert(numeric(10),campo)

     

    veja se isso, caso nao seja pode explicar melhor como vc. precisa, nao entendi direito

     

    Obrigado

     

    quinta-feira, 9 de agosto de 2007 10:10
  • esta como char...

    tentei fazer isso, porem ele dis que não é possivel converter para numerico o caracter em questão.


    como eu posso descriptografa para ordernar???


    olhem como fica minha os dados:

    TABELA ASCII:
    Caracter | ASCII
    0|48
    1|49
    2|50
    3|51
    4|52
    5|53
    6|54
    7|55
    8|56
    9|57

    Criptografado:
    Caracter | ASCII
    °|176
    ±|177
    ²|178
    ³|179
    ´|180
    µ|181
    ¶|182
    ·|183
    ¸|184
    ¹|185

    Criptografado e ordenado pela primeira coluna:
    Caracter | ASCII
    ´       180
    ¸       184
    ±       177
    °       176
    µ       181
    ¶       182
    ·       183
    ¹       185
    ²       178
    ³       179

    quinta-feira, 9 de agosto de 2007 12:56
  •  

    Charles,

     

    Criei essa function pra você:

     

    Code Snippet
    CREATE FUNCTION dbo.fnDescriptografa128 (@v varchar (100))
    RETURNS varchar (100)
    AS
    BEGIN
     DECLARE @novo varchar (100)
     DECLARE @c int
     SELECT  @c = 1, @novo = ''
     IF len (@v) = 0
      RETURN ''
     WHILE @c <= len (@v)
      SELECT @novo = @novo + char ( ascii (substring (@v, @c, @c + 1)) - 128), @c = @c + 1
     RETURN @novo
    END

     

     

     

    Para usar ela, basta usar sobre o campo desejado, exemplo:

     

    Code Snippet

    SELECT dbo.fnDescriptografa128 (Senha) FROM tblUsuarios

     

     

    Espero que ajude.

     

     

     

    Abraço

    quinta-feira, 9 de agosto de 2007 13:13
  • Alexandre VM,

    Sim é muito util, eu já ate tinha pensando em algo do tipo...

    O problema é que dessa fora a criptografia fica aberta a todos.. pois o meu banco fica instalado no cliente e ele pode acessar a qualquer momento Tongue Tied
    quinta-feira, 9 de agosto de 2007 13:18
  •  

    Charles,

     

    Agora sim:

     

     

    Code Snippet

    CREATE FUNCTION dbo.fnDescriptografa128 (@v varchar (100))
    RETURNS varchar (100)
    WITH ENCRYPTION
    AS
    BEGIN
     DECLARE @novo varchar (100)
     DECLARE @c int
     SELECT  @c = 1, @novo = ''
     IF len (@v) = 0
      RETURN ''
     WHILE @c <= len (@v)
      SELECT @novo = @novo + char ( ascii (substring (@v, @c, @c + 1)) - 128), @c = @c + 1
     RETURN @novo
    END

     

     

    Desta forma, depois de criada a function, ninguém poderá ver o conteúdo dela!!

     

     

    Abraço

    quinta-feira, 9 de agosto de 2007 13:51
  • Hum, interessante...

    Vou tentar utiliza-la aki...


    Agora estava reparando no seu codigo tem uma função ascii... ela é do proprio SQL?

    Será que eu não poderia usar ela no meu order by?

    assim ele ordenaria de acordo com o codigo ascii... teria como?
    quinta-feira, 9 de agosto de 2007 14:18
  •  

    Charles,

     

    Sim... realmente, bem pensado. Só que ela retorna o ASCII de um caracter. Teria que passar o primeiro caracter apenas pra ela. Além disso, a ordenação será baseada nesse primeiro caracter. Enquanto que a minha função vai retornar a palavra inteira.

     

     

    Abraço

    quinta-feira, 9 de agosto de 2007 14:23