2013-11-19 12 views
0
return Base64.encodeBase64String(cipherText); 

im получение ошибки в этой строке. Я предлагаю создать класс в base64, но есть ли какой-либо стандартный класс для Base64? Im, использующий это для шифрования.Почему эта строка не работает в java?

import java.net.URLEncoder; 
import java.security.MessageDigest; 
import java.util.Arrays; 
import java.io.*; 
import java.lang.*; 
import javax.crypto.Cipher; 
import javax.crypto.SecretKey; 
import javax.crypto.spec.IvParameterSpec; 
import javax.crypto.spec.SecretKeySpec; 


    public class TRIPPLE_DES { 


     public static void main(String[] args) throws Exception { 


    String text = "cardNumber=28293939493330&securityCode=123&cardExpiryMonth=07&cardExpiryYear=2013&cardHolderName=Test&transactionAmount=50.00&currencyCode=356&customerReferenceNo=9393938393938&cardProvider=VISA&name=Test&mobileNo=983345123412&[email protected]&contactNo=983345123412&password=wyzgames&amount=100&remoteIP=10.10.10.50&checkSum=92be84d25b60b3f9f233c074d12ade1ddef158cb369a0734afff3fb6adc9d7ddb4b26f7e6001563747a8d47457e713750e5802b4871cfbe70baca9304d4c385f"; 


     String codedtext = new TRIPPLE_DES().encrypt(text); 
     String decodedtext = new TRIPPLE_DES().decrypt(codedtext); 


     String encodedurl = URLEncoder.encode(codedtext,"UTF-8"); 
     System.out.println(encodedurl); 
     System.out.println(decodedtext); 
     } 


     public String encrypt(String message) throws Exception { 
     final MessageDigest md = MessageDigest.getInstance("md5"); 
     final byte[] digestOfPassword = md.digest("HG58YZ3CR9".getBytes("utf-8")); 
     final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); 


     for (int j = 0, k = 16; j < 8;) { 
      keyBytes[k++] = keyBytes[j++]; 
     } 


     final SecretKey key = new SecretKeySpec(keyBytes, "DESede"); 
     final IvParameterSpec iv = new IvParameterSpec(new byte[8]); 
     final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 
     cipher.init(Cipher.ENCRYPT_MODE, key, iv); 


     final byte[] plainTextBytes = message.getBytes("utf-8"); 
     final byte[] cipherText = cipher.doFinal(plainTextBytes); 

     return Base64.encodeBase64String(cipherText); 
     } 


     public String decrypt(String message) throws Exception 
     { 
     final MessageDigest md = MessageDigest.getInstance("md5"); 
     final byte[] digestOfPassword = md.digest("HG58YZ3CR9".getBytes("utf-8")); 
     final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); 
     for (int j = 0, k = 16; j < 8;) { 
      keyBytes[k++] = keyBytes[j++]; 
     } 


     final SecretKey key = new SecretKeySpec(keyBytes, "DESede"); 
     final IvParameterSpec iv = new IvParameterSpec(new byte[8]); 
     final Cipher decipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 
     decipher.init(Cipher.DECRYPT_MODE, key, iv); 



     byte[] byteMessage= Base64.decodeBase64(message); 
     final byte[] plainText = decipher.doFinal(byteMessage); 


     return new String(plainText, "UTF-8"); 
     } 
    } 
+1

Что вы ожидаете произойдет F выполните следующую команду: 'return Base64.encodeBase64String (cipherText);'? Вы сами написали это, и 'Base64' не существует в вашем коде. – Math

+0

возможно дубликат http://stackoverflow.com/questions/16169008/why-method-base64-encodebase64stringbyte-is-not-available –

+0

@Math не мой код .. Он предоставил мне код – Ajeesh

ответ

3

В JDK нет официального Base64 классов.

Я могу предложить вам использовать это: Apache Commons Codec

+0

Ok thanks.i скачали это commen codec.Как могу я использовать его с этой программой – Ajeesh

+0

Добавить библиотеку в путь к классу проекта и импортировать нужный класс – Cirou

+0

С версии Java 6 имеется встроенная поддержка кодировки Base64. Нет необходимости использовать внешнюю библиотеку. http://stackoverflow.com/questions/469695/decode-base64-data-in-java/2054226#2054226 –

0

вы можете использовать Base64Encoder и Base64Decoder для вас цели.

Изменить

Base64.encodeBase64String(cipherText) 

в

new BASE64Encoder().encode(cipherText) 

и

Base64.decodeBase64(message) 

в

new BASE64Decoder().decodeBuffer(message) 
+0

Я, но мне нужно импортировать все? – Ajeesh

+0

Это классы JDK import sun.misc.BASE64Decoder; импорт sun.misc.BASE64Encoder; – Adi

+0

sun.misc.BASE64Decoder не является официальным классом JDK. –