Solved

# Equivalent functions in sql server 2000 against functions of powerbuilder 7.

Posted on 2004-08-11
627 Views

A      “›‹‡
B      ³¹‡
C      §‹µ¹•¥
D      ¯‹‘…§

The values in the column password has been saved from within a front end by a function f_encrypt.

Here
“›‹‡   means DIBA      (created from f_encrypt('DIBA'))
§‹µ¹•¥ means NAWZIR

Please note that “›‹‡ is created from f_encrypt('DIBA').Similarly DIBA can be obtained by f_decrypt('“›‹‡')

The two functions are:
[function f_encrypt]
integer chrvalue, seed,mlen,i
string  mstring, mchar
chrvalue = 0
seed = 17
mchar = ''
mstring  = trim(given_string)
mlen     = len(mstring)
FOR  I = 1 TO mlen
chrvalue = asc(mid(mstring,I,1))
chrvalue = ((chrvalue + seed + 95 - I)*2) - 211
mchar = mchar + char(chrvalue)
next
return (mchar)

[function f_decrypt]
integer chrvalue,i,mlen, seed
string mstring, mchar

chrvalue = 0
seed = 17
mchar = ''
mstring = trim(given_string)
mlen    = len(mstring)

for  I = 1 TO mlen
chrvalue = ASC(mid(mstring,I,1))
chrvalue = (chrvalue + 211)/2 +I -  95 - SEED
mchar    = mchar + char(chrvalue)
next

return (mchar)

I want those two functions/procedure to be created in sql server 2000.
0
Question by:Mateen
• 3
• 2

LVL 12

Accepted Solution

patrikt earned 500 total points
First one:

CREATE FUNCTION f_encrypt (@given_string varchar(50))
RETURNS varchar(50)
AS
BEGIN
declare @chrvalue int, @seed int, @mlen int,@i int
declare @mstring varchar(50), @mchar varchar(50)

SELECT @chrvalue = 0,@seed = 17,@mchar = ''
SET @mstring  = ltrim(rtrim(@given_string))
SET @mlen     = len(@mstring)
SET @i=1
WHILE @i<=@mlen
BEGIN
SET @chrvalue = ascii(substring(@mstring,@I,1))
SET @chrvalue = ((@chrvalue + @seed + 95 - @I)*2) - 211
SET @mchar = @mchar + char(@chrvalue)
set @I=@I+1
END
return (@Mchar)
END
0

LVL 12

Expert Comment

Secon one:
CREATE functION f_decrypt (@given_string varchar(50))
RETURNS varchar(50)
AS
BEGIN
declare @chrvalue int,@i int,@mlen int, @seed int
declare @mstring varchar(50), @mchar varchar(50)

SELECT @chrvalue = 0,@seed = 17,@mchar = ''
SET @mstring = ltrim(rtrim(@given_string))
SET @mlen    = len(@mstring)
SET @i=1

WHILE @I <= @mlen
BEGIN
SET @chrvalue = ASCii(substring(@mstring,@I,1))
SET @chrvalue = (@chrvalue + 211)/2 +@I -  95 - @SEED
SET @mchar    = @mchar + char(@chrvalue)
SET @i=@i+1
END

return (@mchar)
END
0

LVL 12

Expert Comment

I only rewrited sintax to SQL. You have to check data types if it is usable for your scenario.

SQL hates loops so I would try to find beter performing aproach...But for short strings it is not significant.

Patrik
0

Author Comment

Many many thanks patrikt
0

Author Comment

Please do submit when u find better approach. I shall be delighted.
0

## Featured Post

This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
For both online and offline retail, the cross-channel business is the most recent pattern in the B2C trade space.
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.
Viewers will learn how to use the UPDATE and DELETE statements to change or remove existing data from their tables. Make a table: Update a specific column given a specific row using the UPDATE statement: Remove a set of values using the DELETE s…