AutorÃa | Ultima modificación | Ver Log |
package com.cesams.twogetskills.library;import java.util.*;public abstract class RSA {private static long mo(long g, long l){long result = g - (l * (long) Math.floor(g/l));return result;}private static long powmod(long base, long exp, long modulus) {long accum = 1;int i = 0;long basepow2 = base;while ((exp >> i)>0){if (((exp >> i) & 1) == 1){accum = mo((accum * basepow2) , modulus);}basepow2 = mo((basepow2 * basepow2) , modulus);i++;}return accum;}public static String decode(String c, long d, long n){String[] decryptarray = c.split(" ");//Each number is then decrypted using the RSA formula: block ^D mod NStringBuffer deencrypt = new StringBuffer();for (int u=0; u < decryptarray.length; u++){if(decryptarray[u].equals("")) {continue;}String resultmod = String.valueOf(powmod(Long.valueOf(decryptarray[u]), d, n));deencrypt.append(resultmod.substring(1, resultmod.length() - 1));}String s = deencrypt.toString();StringBuffer resultd = new StringBuffer();for (int u=0; u< s.length() ; u+=2){String num = s.substring(u, u + 2);int i = Integer.valueOf(num) + 30;char ch = (char) i;resultd.append(ch);}return resultd.toString();}public static String encode (String m, long e, long n) {Vector<String> array = new Vector<String>();for (int i=0; i<m.length(); i+=3) {String tmpasci="1";for (int h=0; h<3; h++) {String tmpstr = "";if (i+ h < m.length()) {int aux = m.charAt(i + h);tmpstr = String.valueOf(aux - 30);if (tmpstr.length() < 2) {tmpstr = '0' + tmpstr;}} else {break;}tmpasci = tmpasci + tmpstr;}tmpasci = tmpasci + '1';array.add(tmpasci);}StringBuffer coded = new StringBuffer();for (int k=0; k<array.size(); k++) {long resultmod = powmod(Long.valueOf(array.elementAt(k)), e, n);coded.append( String.valueOf(resultmod));coded.append(" ");}return coded.toString();}}