Changeset 21ab56 in git
- Timestamp:
- Aug 7, 2008, 6:00:50 PM (16 years ago)
- Branches:
- (u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b4f17ed1d25f93d46dbe29e4b499baecc2fd51bb')
- Children:
- 1747d96b7453246c6adbfeaa049fcdc86ce6baeb
- Parents:
- 8aa6644ea35972e79663964572e177714af6c853
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/crypto.lib
r8aa664 r21ab56 1 1 //GP, last modified 28.6.06 2 2 /////////////////////////////////////////////////////////////////////////////// 3 version="$Id: crypto.lib,v 1. 4 2008-03-25 15:54:04Singular Exp $";3 version="$Id: crypto.lib,v 1.5 2008-08-07 16:00:50 Singular Exp $"; 4 4 category="Teaching"; 5 5 info=" … … 1954 1954 } 1955 1955 1956 static proc wordToNumber(string s) 1957 { 1958 int i; 1959 intvec v; 1960 number n; 1961 number t=27; 1962 for(i=size(s);i>0;i--) 1963 { 1964 if(s[i]=="a"){v[i]=0;} 1965 if(s[i]=="b"){v[i]=1;} 1966 if(s[i]=="c"){v[i]=2;} 1967 if(s[i]=="d"){v[i]=3;} 1968 if(s[i]=="e"){v[i]=4;} 1969 if(s[i]=="f"){v[i]=5;} 1970 if(s[i]=="g"){v[i]=6;} 1971 if(s[i]=="h"){v[i]=7;} 1972 if(s[i]=="i"){v[i]=8;} 1973 if(s[i]=="j"){v[i]=9;} 1974 if(s[i]=="k"){v[i]=10;} 1975 if(s[i]=="l"){v[i]=11;} 1976 if(s[i]=="m"){v[i]=12;} 1977 if(s[i]=="n"){v[i]=13;} 1978 if(s[i]=="o"){v[i]=14;} 1979 if(s[i]=="p"){v[i]=15;} 1980 if(s[i]=="q"){v[i]=16;} 1981 if(s[i]=="r"){v[i]=17;} 1982 if(s[i]=="s"){v[i]=18;} 1983 if(s[i]=="t"){v[i]=19;} 1984 if(s[i]=="u"){v[i]=20;} 1985 if(s[i]=="v"){v[i]=21;} 1986 if(s[i]=="w"){v[i]=22;} 1987 if(s[i]=="x"){v[i]=23;} 1988 if(s[i]=="y"){v[i]=24;} 1989 if(s[i]=="z"){v[i]=25;} 1990 if(s[i]==" "){v[i]=26;} 1991 } 1992 for(i=1;i<=size(s);i++) 1993 { 1994 n=n+v[i]*t^(i-1); 1995 } 1996 return(n); 1997 } 1998 1999 static proc numberToWord(number n) 2000 { 2001 int i,j; 2002 string v; 2003 list s; 2004 number t=27; 2005 number mm; 2006 number nn=n; 2007 while(nn>t) 2008 { 2009 j++; 2010 mm=nn mod t; 2011 s[j]=mm; 2012 nn=(nn-mm)/t; 2013 } 2014 j++; 2015 s[j]=nn; 2016 for(i=1;i<=j;i++) 2017 { 2018 if(s[i]==0){v=v+"a";} 2019 if(s[i]==1){v=v+"b";} 2020 if(s[i]==2){v=v+"c";} 2021 if(s[i]==3){v=v+"d";} 2022 if(s[i]==4){v=v+"e";} 2023 if(s[i]==5){v=v+"f";} 2024 if(s[i]==6){v=v+"g";} 2025 if(s[i]==7){v=v+"h";} 2026 if(s[i]==8){v=v+"i";} 2027 if(s[i]==9){v=v+"j";} 2028 if(s[i]==10){v=v+"k";} 2029 if(s[i]==11){v=v+"l";} 2030 if(s[i]==12){v=v+"m";} 2031 if(s[i]==13){v=v+"n";} 2032 if(s[i]==14){v=v+"o";} 2033 if(s[i]==15){v=v+"p";} 2034 if(s[i]==16){v=v+"q";} 2035 if(s[i]==17){v=v+"r";} 2036 if(s[i]==18){v=v+"s";} 2037 if(s[i]==19){v=v+"t";} 2038 if(s[i]==20){v=v+"u";} 2039 if(s[i]==21){v=v+"v";} 2040 if(s[i]==22){v=v+"w";} 2041 if(s[i]==23){v=v+"x";} 2042 if(s[i]==24){v=v+"y";} 2043 if(s[i]==25){v=v+"z";} 2044 if(s[i]==26){v=v+" ";} 2045 } 2046 return(v); 2047 } 2048 2049 proc code(string s) 2050 "USAGE: code(s); s a string 2051 ASSUME: s contains only small letters and space 2052 COMPUTE: a number, RSA-coding of the string s 2053 RETURN: return RSA-coding of the string s as string 2054 EXAMPLE: code; shows an example 2055 " 2056 { 2057 ring r=0,x,dp; 2058 number 2059 p=398075086424064937397125500550386491199064362342526708406385189575946388957261768583317; 2060 number 2061 q=472772146107435302536223071973048224632914695302097116459852171130520711256363590397527; 2062 number n=p*q; 2063 number phi=(p-1)*(q-1); 2064 number e=1234567891; 2065 list L=exgcdN(e,phi); 2066 number d=L[1]; 2067 number m=wordToNumber(s); 2068 number c=powerN(m,e,n); 2069 string cc=string(c); 2070 return(cc); 2071 } 2072 example 2073 {"EXAMPLE:"; echo = 2; 2074 string s="i go to school"; 2075 code(s); 2076 } 2077 2078 proc decode(string g) 2079 "USAGE: decode(s); s a string 2080 ASSUME: s is a string of a number, the output of code 2081 COMPUTE: a string, RSA-decoding of the string s 2082 RETURN: return RSA-decoding of the string s as string 2083 EXAMPLE: decode; shows an example 2084 " 2085 { 2086 ring r=0,x,dp; 2087 number 2088 p=398075086424064937397125500550386491199064362342526708406385189575946388957261768583317; 2089 number 2090 q=472772146107435302536223071973048224632914695302097116459852171130520711256363590397527; 2091 number n=p*q; 2092 number phi=(p-1)*(q-1); 2093 number e=1234567891; 2094 list L=exgcdN(e,phi); 2095 number d=L[1]; 2096 execute("number c="+g+";"); 2097 number f=powerN(c,d,n); 2098 string s=numberToWord(f); 2099 return(s); 2100 } 2101 example 2102 {"EXAMPLE:"; echo = 2; 2103 string 2104 s="78638618599886548153321853785991541374544958648147340831959482696082179852616053583234149080198937632782579537867262780982185252913122030800897193851413140758915381848932565"; 2105 string t=decode(s); 2106 t; 2107 } 1956 2108 1957 2109 /*
Note: See TracChangeset
for help on using the changeset viewer.