大神帮忙p图看一下第一问 这个an怎么求

(C)2015 技术邻 | 浙ICP备号-1 |JPA测试发生Not an managed type,求大神帮忙解决
我这边的思路是有ID虚类,之后由entity继承,注意:在运行的状态下,能够正常工作,但是当我希望使用Spring Test时,给我报错Not an managed type,起先我以为是UUID的问题,到后面发现并不是由UUID引起,普通ID也没有,我这里使用的是自动扫描。配置如下:
&!-- 对JPA声明以hibernate进行实现 --&
&bean id="persistenceProvider" class="org.hibernate.ejb.HibernatePersistence"/&
&bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /&
&bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/&
&!-- JPA进行实体扫描 --&
&bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"&
&!-- 自动扫描Entity实体 --&
&property name="packagesToScan" value="com.hava.demo"/&
&!-- 指明JPA的persistence的配置文件位置 --&
&property name="persistenceXmlLocation" value="/WEB-INF/appconfig/orm/jpa/persistence.xml" /&
&property name="persistenceUnitName" value="persistenceUnit"/&
&!-- 注入dataSource --&
&property name="dataSource" ref="dataSource"/&
&property name="jpaVendorAdapter" ref="jpaVendorAdapter" /&
&!-- 指定具体实现ORM框架的特定属性 --&
&property name="jpaProperties"&
&prop key="hibernate.show_sql"&true&/prop&
&prop key="hibernate.hbm2ddl.auto"&update&/prop&
&prop key="hibernate.dialect"&${jdbc.dialect}&/prop&
&/property&
&bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"&
&property name="entityManagerFactory" ref="entityManagerFactory"/&
&!--说明事务的配置使用的注解方式--&
&tx:annotation-driven transaction-manager="transactionManager"/&
&!-- Spring Data Jpa自动扫描Repository进行DAO实现--&
&jpa:repositories base-package="com.hava.demo" /&
&?xml version="1.0" encoding="UTF-8"?&
&persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
&persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"&
&!--&provider&org.hibernate.ejb.HibernatePersistence&/provider&--&
&!--&properties&--&
&!--&!&&property name="hibernate.ejb.cfgfile" value="/WEB-INF/appconfig/orm/hibernate/hibernate.cfg.xml" /&&&--&
&!--&/properties&--&
&/persistence-unit&
&/persistence&
Entity虚类:
package com.hava.
import com.hava.util.ObjectU
import javax.persistence.*;
import java.util.D
* * 在数据库存储和使用过程中,统一采用ID的访问形式
* * 在数据库当中启用自动时间戳的方式,对该调记录的更新时间进行存储
* * Created by zhanpeng on 15-1-19.
@MappedSuperclass
public abstract class IdEntity extends ObjectUtils {
//GenerationType.IDENTITY 自增长,仅限于数字id
@GeneratedValue(strategy = GenerationType.IDENTITY)
//声明两个时间列,用来作为创建时间和更新时间
@Temporal(TemporalType.TIMESTAMP)
private Date update_
@Temporal(TemporalType.TIMESTAMP)
private Date create_
//在创建时,对创建时间和更新时间进行刷新
@PrePersist
public void prePersist(){
this.update_timestamp = new Date();
this.create_timestamp = this.update_
//在更新时,对更新时间进行刷新
@PreUpdate
public void preUpdate(){
this.update_timestamp = new Date();
//Getter and Setter
public Date getCreate_timestamp() {
return create_
public void setCreate_timestamp(Date create_timestamp) {
this.create_timestamp = create_
public Long getId() {
public void setId(Long id) {
public Date getUpdate_timestamp() {
return update_
public void setUpdate_timestamp(Date update_timestamp) {
this.update_timestamp = update_
Entity类:
package com.hava.demo.
import com.hava.orm.entity.IdE
import javax.persistence.Id;
import javax.persistence.E
import javax.persistence.L
import javax.persistence.T
import java.util.D
* Created by zhanpeng on 15-11-20.
@Table(name = "idoneentity")
public class IdOneEntity extends IdEntity{
//@Temporal(TemporalType.DATE)
//用来扩充数据库容量,不然会发生数据是变成数据库默认的string长度
public short getShortnumber() {
public void setShortnumber(short shortnumber) {
this.shortnumber =
public int getIntnumber() {
public void setIntnumber(int intnumber) {
this.intnumber =
public long getLongnumber() {
public void setLongnumber(long longnumber) {
this.longnumber =
public String getDescription() {
public void setDescription(String description) {
this.description =
public Date getDate() {
public void setDate(Date date) {
this.date =
public String getContext() {
public void setContext(String context) {
this.context =
Repository:
package com.hava.demo.repository.
import com.hava.demo.entity.IdOneE
import com.hava.orm.jpa.AutoR
import org.springframework.stereotype.R
* Created by zhanpeng on 15-11-23.
@Repository
public interface IdOneJPARepository extends AutoRepository&IdOneEntity,Long& {
package com.hava.demo.service.
import com.hava.demo.entity.IdOneE
import com.hava.demo.repository.jpa.IdOneJPAR
import org.junit.T
import org.junit.runner.RunW
import org.springframework.beans.factory.annotation.A
import org.springframework.test.context.ContextC
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextT
import org.springframework.test.context.junit4.SpringJUnit4ClassR
import org.springframework.test.context.web.WebAppC
import javax.persistence.PersistenceU
import java.util.D
import java.util.L
* Created by zhanpeng on 15-11-30.
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration("/src/main/webapp")
@ContextConfiguration("file:src/main/webapp/WEB-INF/appconfig/mvc/spring/servlet-context.xml")
public class IdOneJPAServiceTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired
IdOneJPAService idOneJPAS
@Autowired
IdOneJPARepository idOneJPAR
public void WriteAndRead()
IdOneEntity idOneEntity = new IdOneEntity();
idOneEntity.setDescription("This is Description");
idOneEntity.setContext("This is Context");
idOneEntity.setDate(new Date());
idOneEntity.setIntnumber(1);
idOneEntity.setLongnumber(1l);
idOneEntity.setShortnumber((short) 1);
idOneJPARepository.save(idOneEntity);
List&IdOneEntity& lists = idOneJPARepository.findAll();
for(IdOneEntity entity : lists)
entity.printProperties();
Testing started at 上午9:49 ...
9:49:13: Executing external tasks 'cleanTest test --tests com.hava.demo.service.jpa.IdOneJPAServiceTest'...
:cleanTest
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
warning: [options] bootstrap class path not set in conjunction with -source 1.5
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
com.hava.web.bean.InitSpringBean init...
property[name]:value
com.hava.web.bean.InitSpringBean destroy...
Failed to load ApplicationContext
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:183)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:123)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:105)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:56)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:64)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:106)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:360)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UUIDOneJPAService': Injection of autowired nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.hava.demo.repository.jpa.UUIDOneJPARepository com.hava.demo.service.jpa.UUIDOneJPAService. nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UUIDOneJPARepository': Invocation o nested exception is java.lang.IllegalArgumentException: Not an managed type: class com.hava.demo.entity.UUIDOneEntity
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:838)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)
at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:133)
at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:60)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:109)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:261)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
... 45 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.hava.demo.repository.jpa.UUIDOneJPARepository com.hava.demo.service.jpa.UUIDOneJPAService. nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UUIDOneJPARepository': Invocation o nested exception is java.lang.IllegalArgumentException: Not an managed type: class com.hava.demo.entity.UUIDOneEntity
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
... 61 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UUIDOneJPARepository': Invocation o nested exception is java.lang.IllegalArgumentException: Not an managed type: class com.hava.demo.entity.UUIDOneEntity
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
... 63 more
Caused by: java.lang.IllegalArgumentException: Not an managed type: class com.hava.demo.entity.UUIDOneEntity
at org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:219)
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.&init&(JpaMetamodelEntityInformation.java:68)
at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getEntityInformation(JpaEntityInformationSupport.java:67)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:152)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:99)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:81)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:185)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:251)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:237)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 73 more
com.hava.demo.service.jpa.IdOneJPAServiceTest & WriteAndRead FAILED
java.lang.IllegalStateException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: org.springframework.beans.factory.BeanCreationException
Caused by: java.lang.IllegalArgumentException
Empty test suite.
Empty test suite.
1 test completed, 1 failed
:test FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
& There were failing tests. See the report at: file:///home/zhanpeng/Workspace/J2ee/HavaWeb/build/reports/tests/index.html
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 4.847 secs
There were failing tests. See the report at: file:///home/zhanpeng/Workspace/J2ee/HavaWeb/build/reports/tests/index.html
刷新,求高手解决
你好,你的这个问题解决了吗?
UUIDOneEntity&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
这个类是不是不在entity扫描的路径下面&&&您需要以后才能回答,未注册用户请先。ul').hide()" onmouseenter="jQuery('.sitegroup>ul').show()">
立即充值>
请完成以下验证码
十万火急,求哪位大神帮忙看看android——AES问题!!!
public class AESObfuscator implements Obfuscator {
& & private static final String UTF8 = &UTF-8&;
& & private static final String KEYGEN_ALGORITHM = &PBEWithSHA1And256BitAES-CBC-BC&;
& & private static final String CIPHER_ALGORITHM = &AES/CBC/PKCS5Padding&;
& & private static final byte[] IV =
& && &&&{106, (byte)253,(byte)200, 51, (byte)185, (byte)222, (byte)180, (byte)170, 94, 93, 73, 51, 82, (byte)213, (byte)251, 8 };
& & private Cipher mE
& & private Cipher mD
& &&&* @param salt an array of random bytes to use for each (un)obfuscation
& &&&* @param deviceId device identifier. Use as many sources as possible to
& &&&*& & create this unique identifier.
& & public AESObfuscator(byte[] salt,String deviceId) {
& && &&&try {
& && && && &SecretKeyFactory factory = SecretKeyFactory.getInstance(KEYGEN_ALGORITHM);
& && && && &KeySpec keySpec =
& && && && && & new PBEKeySpec(deviceId.toCharArray(), salt, );
& && && && &SecretKey tmp = factory.generateSecret(keySpec);
& && && && &SecretKey secret = new SecretKeySpec(tmp.getEncoded(), &AES&);
& && && && &mEncryptor = Cipher.getInstance(CIPHER_ALGORITHM);
& && && && &mEncryptor.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(IV));
& && && && &mDecryptor = Cipher.getInstance(CIPHER_ALGORITHM);
& && && && &mDecryptor.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(IV));
& && &&&} catch (GeneralSecurityException e) {
& && && && &// This can't happen on a compatible Android device.
& && && && &throw new RuntimeException(&Invalid environment&, e);
& & public String obfuscate(String original) {
& && &&&if (original == null) {
& && && && &
& && &&&try {
& && && && &// Header is appended as an integrity check
& && && && &return Base64.encode(mEncryptor.doFinal(original.getBytes(UTF8)));
& && &&&} catch (UnsupportedEncodingException e) {
& && && && &throw new RuntimeException(&Invalid environment&, e);
& && &&&} catch (GeneralSecurityException e) {
& && && && &throw new RuntimeException(&Invalid environment&, e);
& & public String unobfuscate(String obfuscated) throws ValidationException {
& && &&&if (obfuscated == null) {
& && && && &
& && &&&try {
& && && && &String result = new String(mDecryptor.doFinal(Base64.decode(obfuscated)), UTF8);
& && && && &
& && &&&} catch (Base64DecoderException e) {
& && && && &throw new ValidationException(e.getMessage() + &:& + obfuscated);
& && &&&} catch (IllegalBlockSizeException e) {
& && && && &throw new ValidationException(e.getMessage() + &:& + obfuscated);
& && &&&} catch (BadPaddingException e) {
& && && && &throw new ValidationException(e.getMessage() + &:& + obfuscated);
& && &&&} catch (UnsupportedEncodingException e) {
& && && && &throw new RuntimeException(&Invalid environment&, e);
// Portions copyright 2002, Google, Inc.
// Licensed under the Apache License, Version 2.0 (the &License&);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an &AS IS& BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.android.vending.
// This code was converted from code at
// Lots of extraneous features were removed.
/* The original code said:
* I am placing this code in the Public Domain. Do with it as you will.
* This software comes with no guarantees or warranties but with
* plenty of well-wishing instead!
* Please visit
* &a href=&http://iharder.net/xmlizable&&
* periodically to check for updates or to contribute improvements.
* @author Robert Harder
* @version 1.3
* Base64 converter class. This code is not a full-blown MIME
* it simply converts binary data to base64 data and back.
* &p&Note {@link CharBase64} is a GWT-compatible implementation of this
public class Base64 {
&&/** Specify encoding (value is { true}). */
&&public final static boolean ENCODE =
&&/** Specify decoding (value is {@code false}). */
&&public final static boolean DECODE =
&&/** The equals sign (=) as a byte. */
&&private final static byte EQUALS_SIGN = (byte) '=';
&&/** The new line character (\n) as a byte. */
&&private final static byte NEW_LINE = (byte) '\n';
& &* The 64 valid Base64 values.
&&private final static byte[] ALPHABET =
& && &{(byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F',
& && && & (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K',
& && && & (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O', (byte) 'P',
& && && & (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U',
& && && & (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', (byte) 'Z',
& && && & (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e',
& && && & (byte) 'f', (byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j',
& && && & (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', (byte) 'o',
& && && & (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't',
& && && & (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x', (byte) 'y',
& && && & (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3',
& && && & (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8',
& && && & (byte) '9', (byte) '+', (byte) '/'};
& &* The 64 valid web safe Base64 values.
&&private final static byte[] WEBSAFE_ALPHABET =
& && &{(byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F',
& && && & (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K',
& && && & (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O', (byte) 'P',
& && && & (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U',
& && && & (byte) 'V', (byte) 'W', (byte) 'X', (byte) 'Y', (byte) 'Z',
& && && & (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e',
& && && & (byte) 'f', (byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j',
& && && & (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', (byte) 'o',
& && && & (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't',
& && && & (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x', (byte) 'y',
& && && & (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3',
& && && & (byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8',
& && && & (byte) '9', (byte) '-', (byte) '_'};
& &* Translates a Base64 value to either its 6-bit reconstruction value
& &* or a negative number indicating some other meaning.
&&private final static byte[] DECODABET = {-9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal&&0 -&&8
& && &-5, -5, // Whitespace: Tab and Linefeed
& && &-9, -9, // Decimal 11 - 12
& && &-5, // Whitespace: Carriage Return
& && &-9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 14 - 26
& && &-9, -9, -9, -9, -9, // Decimal 27 - 31
& && &-5, // Whitespace: Space
& && &-9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 33 - 42
& && &62, // Plus sign at decimal 43
& && &-9, -9, -9, // Decimal 44 - 46
& && &63, // Slash at decimal 47
& && &52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // Numbers zero through nine
& && &-9, -9, -9, // Decimal 58 - 60
& && &-1, // Equals sign at decimal 61
& && &-9, -9, -9, // Decimal 62 - 64
& && &0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, // Letters 'A' through 'N'
& && &14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // Letters 'O' through 'Z'
& && &-9, -9, -9, -9, -9, -9, // Decimal 91 - 96
& && &26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, // Letters 'a' through 'm'
& && &39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // Letters 'n' through 'z'
& && &-9, -9, -9, -9, -9 // Decimal 123 - 127
& && &/*&&,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 128 - 139
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 140 - 152
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 153 - 165
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 166 - 178
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 179 - 191
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 192 - 204
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 205 - 217
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 218 - 230
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 231 - 243
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9& && && &// Decimal 244 - 255 */
&&/** The web safe decodabet */
&&private final static byte[] WEBSAFE_DECODABET =
& && &{-9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal&&0 -&&8
& && && & -5, -5, // Whitespace: Tab and Linefeed
& && && & -9, -9, // Decimal 11 - 12
& && && & -5, // Whitespace: Carriage Return
& && && & -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 14 - 26
& && && & -9, -9, -9, -9, -9, // Decimal 27 - 31
& && && & -5, // Whitespace: Space
& && && & -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, // Decimal 33 - 44
& && && & 62, // Dash '-' sign at decimal 45
& && && & -9, -9, // Decimal 46-47
& && && & 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // Numbers zero through nine
& && && & -9, -9, -9, // Decimal 58 - 60
& && && & -1, // Equals sign at decimal 61
& && && & -9, -9, -9, // Decimal 62 - 64
& && && & 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, // Letters 'A' through 'N'
& && && & 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // Letters 'O' through 'Z'
& && && & -9, -9, -9, -9, // Decimal 91-94
& && && & 63, // Underscore '_' at decimal 95
& && && & -9, // Decimal 96
& && && & 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, // Letters 'a' through 'm'
& && && & 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // Letters 'n' through 'z'
& && && & -9, -9, -9, -9, -9 // Decimal 123 - 127
& && &/*&&,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 128 - 139
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 140 - 152
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 153 - 165
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 166 - 178
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 179 - 191
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 192 - 204
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 205 - 217
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 218 - 230
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,& &&&// Decimal 231 - 243
& && &&&-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9,-9& && && &// Decimal 244 - 255 */
&&// Indicates white space in encoding
&&private final static byte WHITE_SPACE_ENC = -5;
&&// Indicates equals sign in encoding
&&private final static byte EQUALS_SIGN_ENC = -1;
&&/** Defeats instantiation. */
&&private Base64() {
&&/* ********&&E N C O D I N G& &M E T H O D S&&******** */
& &* Encodes up to three bytes of the array &var&source&/var&
& &* and writes the resulting four Base64 bytes to &var&destination&/var&.
& &* The source and destination arrays can be manipulated
& &* anywhere along their length by specifying
& &* &var&srcOffset&/var& and &var&destOffset&/var&.
& &* This method does not check to make sure your arrays
& &* are large enough to accommodate &var&srcOffset&/var& + 3 for
& &* the &var&source&/var& array or &var&destOffset&/var& + 4 for
& &* the &var&destination&/var& array.
& &* The actual number of significant bytes in your array is
& &* given by &var&numSigBytes&/var&.
& &* @param source the array to convert
& &* @param srcOffset the index where conversion begins
& &* @param numSigBytes the number of significant bytes in your array
& &* @param destination the array to hold the conversion
& &* @param destOffset the index where output will be put
& &* @param alphabet is the encoding alphabet
& &* @return the &var&destination&/var& array
&&private static byte[] encode3to4(byte[] source, int srcOffset,
& && &int numSigBytes, byte[] destination, int destOffset, byte[] alphabet) {
& & //& && && &&&1& && && &2& && && &3
Bit position
& & // -------- Array position from threeBytes
& & // --------|& & ||& & ||& & ||& & | Six bit groups to index alphabet
& & //& && && & &&18&&&&12&&&& 6&&&& 0&&Right shift necessary
& & //& && && && && & 0x3f&&0x3f&&0x3f&&Additional AND
& & // Create buffer with zero-padding if there are only one or two
& & // significant bytes passed in the array.
& & // We have to shift left 24 in order to flush out the 1's that appear
& & // when Java treats a value as negative that is cast from a byte to an int.
& & int inBuff =
& && &&&(numSigBytes & 0 ? ((source[srcOffset] && 24) &&& 8) : 0)
& && && && &| (numSigBytes & 1 ? ((source[srcOffset + 1] && 24) &&& 16) : 0)
& && && && &| (numSigBytes & 2 ? ((source[srcOffset + 2] && 24) &&& 24) : 0);
& & switch (numSigBytes) {
& && &case 3:
& && &&&destination[destOffset] = alphabet[(inBuff &&& 18)];
& && &&&destination[destOffset + 1] = alphabet[(inBuff &&& 12) & 0x3f];
& && &&&destination[destOffset + 2] = alphabet[(inBuff &&& 6) & 0x3f];
& && &&&destination[destOffset + 3] = alphabet[(inBuff) & 0x3f];
& && &case 2:
& && &&&destination[destOffset] = alphabet[(inBuff &&& 18)];
& && &&&destination[destOffset + 1] = alphabet[(inBuff &&& 12) & 0x3f];
& && &&&destination[destOffset + 2] = alphabet[(inBuff &&& 6) & 0x3f];
& && &&&destination[destOffset + 3] = EQUALS_SIGN;
& && &case 1:
& && &&&destination[destOffset] = alphabet[(inBuff &&& 18)];
& && &&&destination[destOffset + 1] = alphabet[(inBuff &&& 12) & 0x3f];
& && &&&destination[destOffset + 2] = EQUALS_SIGN;
& && &&&destination[destOffset + 3] = EQUALS_SIGN;
& && &default:
& & } // end switch
&&} // end encode3to4
& &* Encodes a byte array into Base64 notation.
& &* Equivalent to calling
& &* {@code encodeBytes(source, 0, source.length)}
& &* @param source The data to convert
& &* @since 1.4
&&public static String encode(byte[] source) {
& & return encode(source, 0, source.length, ALPHABET, true);
& &* Encodes a byte array into web safe Base64 notation.
& &* @param source The data to convert
& &* @param doPadding is {@code true} to pad result with '=' chars
& &*& && &&&if it does not fall on 3 byte boundaries
&&public static String encodeWebSafe(byte[] source, boolean doPadding) {
& & return encode(source, 0, source.length, WEBSAFE_ALPHABET, doPadding);
& &* Encodes a byte array into Base64 notation.
& &* @param source The data to convert
& &* @param off Offset in array where conversion should begin
& &* @param len Length of data to convert
& &* @param alphabet is the encoding alphabet
& &* @param doPadding is {@code true} to pad result with '=' chars
& &*& && &&&if it does not fall on 3 byte boundaries
& &* @since 1.4
&&public static String encode(byte[] source, int off, int len, byte[] alphabet,
& && &boolean doPadding) {
& & byte[] outBuff = encode(source, off, len, alphabet, Integer.MAX_VALUE);
& & int outLen = outBuff.
& & // If doPadding is false, set length to truncate '='
& & // padding characters
& & while (doPadding == false && outLen & 0) {
& && &if (outBuff[outLen - 1] != '=') {
& && &outLen -= 1;
& & return new String(outBuff, 0, outLen);
& &* Encodes a byte array into Base64 notation.
& &* @param source The data to convert
& &* @param off Offset in array where conversion should begin
& &* @param len Length of data to convert
& &* @param alphabet is the encoding alphabet
& &* @param maxLineLength maximum length of one line.
& &* @return the BASE64-encoded byte array
&&public static byte[] encode(byte[] source, int off, int len, byte[] alphabet,
& && &int maxLineLength) {
& & int lenDiv3 = (len + 2) / 3; // ceil(len / 3)
& & int len43 = lenDiv3 * 4;
& & byte[] outBuff = new byte[len43 // Main 4:3
& && &&&+ (len43 / maxLineLength)]; // New lines
& & int d = 0;
& & int e = 0;
& & int len2 = len - 2;
& & int lineLength = 0;
& & for (; d & len2; d += 3, e += 4) {
& && &// The following block of code is the same as
& && &// encode3to4( source, d + off, 3, outBuff, e, alphabet );
& && &// but inlined for faster encoding (~20% improvement)
& && &int inBuff =
& && && & ((source[d + off] && 24) &&& 8)
& && && && &&&| ((source[d + 1 + off] && 24) &&& 16)
& && && && &&&| ((source[d + 2 + off] && 24) &&& 24);
& && &outBuff[e] = alphabet[(inBuff &&& 18)];
& && &outBuff[e + 1] = alphabet[(inBuff &&& 12) & 0x3f];
& && &outBuff[e + 2] = alphabet[(inBuff &&& 6) & 0x3f];
& && &outBuff[e + 3] = alphabet[(inBuff) & 0x3f];
& && &lineLength += 4;
& && &if (lineLength == maxLineLength) {
& && &&&outBuff[e + 4] = NEW_LINE;
& && &&&e++;
& && &&&lineLength = 0;
& && &} // end if: end of line
& & } // end for: each piece of array
& & if (d & len) {
& && &encode3to4(source, d + off, len - d, outBuff, e, alphabet);
& && &lineLength += 4;
& && &if (lineLength == maxLineLength) {
& && &&&// Add a last newline
& && &&&outBuff[e + 4] = NEW_LINE;
& && &&&e++;
& && &e += 4;
& & assert (e == outBuff.length);
& & return outB
&&/* ********&&D E C O D I N G& &M E T H O D S&&******** */
& &* Decodes four bytes from array &var&source&/var&
& &* and writes the resulting bytes (up to three of them)
& &* to &var&destination&/var&.
& &* The source and destination arrays can be manipulated
& &* anywhere along their length by specifying
& &* &var&srcOffset&/var& and &var&destOffset&/var&.
& &* This method does not check to make sure your arrays
& &* are large enough to accommodate &var&srcOffset&/var& + 4 for
& &* the &var&source&/var& array or &var&destOffset&/var& + 3 for
& &* the &var&destination&/var& array.
& &* This method returns the actual number of bytes that
& &* were converted from the Base64 encoding.
& &* @param source the array to convert
& &* @param srcOffset the index where conversion begins
& &* @param destination the array to hold the conversion
& &* @param destOffset the index where output will be put
& &* @param decodabet the decodabet for decoding Base64 content
& &* @return the number of decoded bytes converted
& &* @since 1.3
&&private static int decode4to3(byte[] source, int srcOffset,
& && &byte[] destination, int destOffset, byte[] decodabet) {
& & // Example: Dk==
& & if (source[srcOffset + 2] == EQUALS_SIGN) {
& && &int outBuff =
& && && & ((decodabet[source[srcOffset]] && 24) &&& 6)
& && && && &&&| ((decodabet[source[srcOffset + 1]] && 24) &&& 12);
& && &destination[destOffset] = (byte) (outBuff &&& 16);
& && &return 1;
& & } else if (source[srcOffset + 3] == EQUALS_SIGN) {
& && &// Example: DkL=
& && &int outBuff =
& && && & ((decodabet[source[srcOffset]] && 24) &&& 6)
& && && && &&&| ((decodabet[source[srcOffset + 1]] && 24) &&& 12)
& && && && &&&| ((decodabet[source[srcOffset + 2]] && 24) &&& 18);
& && &destination[destOffset] = (byte) (outBuff &&& 16);
& && &destination[destOffset + 1] = (byte) (outBuff &&& 8);
& && &return 2;
& & } else {
& && &// Example: DkLE
& && &int outBuff =
& && && & ((decodabet[source[srcOffset]] && 24) &&& 6)
& && && && &&&| ((decodabet[source[srcOffset + 1]] && 24) &&& 12)
& && && && &&&| ((decodabet[source[srcOffset + 2]] && 24) &&& 18)
& && && && &&&| ((decodabet[source[srcOffset + 3]] && 24) &&& 24);
& && &destination[destOffset] = (byte) (outBuff && 16);
& && &destination[destOffset + 1] = (byte) (outBuff && 8);
& && &destination[destOffset + 2] = (byte) (outBuff);
& && &return 3;
&&} // end decodeToBytes
& &* Decodes data from Base64 notation.
& &* @param s the string to decode (decoded in default encoding)
& &* @return the decoded data
& &* @since 1.4
&&public static byte[] decode(String s) throws Base64DecoderException {
& & byte[] bytes = s.getBytes();
& & return decode(bytes, 0, bytes.length);
& &* Decodes data from web safe Base64 notation.
& &* Web safe encoding uses '-' instead of '+', '_' instead of '/'
& &* @param s the string to decode (decoded in default encoding)
& &* @return the decoded data
&&public static byte[] decodeWebSafe(String s) throws Base64DecoderException {
& & byte[] bytes = s.getBytes();
& & return decodeWebSafe(bytes, 0, bytes.length);
& &* Decodes Base64 content in byte array format and returns
& &* the decoded byte array.
& &* @param source The Base64 encoded data
& &* @return decoded data
& &* @since 1.3
& &* @throws Base64DecoderException
&&public static byte[] decode(byte[] source) throws Base64DecoderException {
& & return decode(source, 0, source.length);
& &* Decodes web safe Base64 content in byte array format and returns
& &* the decoded data.
& &* Web safe encoding uses '-' instead of '+', '_' instead of '/'
& &* @param source the string to decode (decoded in default encoding)
& &* @return the decoded data
&&public static byte[] decodeWebSafe(byte[] source)
& && &throws Base64DecoderException {
& & return decodeWebSafe(source, 0, source.length);
& &* Decodes Base64 content in byte array format and returns
& &* the decoded byte array.
& &* @param source The Base64 encoded data
& &* @param off& & The offset of where to begin decoding
& &* @param len& & The length of characters to decode
& &* @return decoded data
& &* @since 1.3
& &* @throws Base64DecoderException
&&public static byte[] decode(byte[] source, int off, int len)
& && &throws Base64DecoderException {
& & return decode(source, off, len, DECODABET);
& &* Decodes web safe Base64 content in byte array format and returns
& &* the decoded byte array.
& &* Web safe encoding uses '-' instead of '+', '_' instead of '/'
& &* @param source The Base64 encoded data
& &* @param off& & The offset of where to begin decoding
& &* @param len& & The length of characters to decode
& &* @return decoded data
&&public static byte[] decodeWebSafe(byte[] source, int off, int len)
& && &throws Base64DecoderException {
& & return decode(source, off, len, WEBSAFE_DECODABET);
& &* Decodes Base64 content using the supplied decodabet and returns
& &* the decoded byte array.
& &* @param source& & The Base64 encoded data
& &* @param off& && & The offset of where to begin decoding
& &* @param len& && & The length of characters to decode
& &* @param decodabet the decodabet for decoding Base64 content
& &* @return decoded data
&&public static byte[] decode(byte[] source, int off, int len, byte[] decodabet)
& && &throws Base64DecoderException {
& & int len34 = len * 3 / 4;
& & byte[] outBuff = new byte[2 + len34]; // Upper limit on size of output
& & int outBuffPosn = 0;
& & byte[] b4 = new byte[4];
& & int b4Posn = 0;
& & int i = 0;
& & byte sbiCrop = 0;
& & byte sbiDecode = 0;
& & for (i = 0; i & i++) {
& && &sbiCrop = (byte) (source[i + off] & 0x7f); // Only the low seven bits
& && &sbiDecode = decodabet[sbiCrop];
& && &if (sbiDecode &= WHITE_SPACE_ENC) { // White space Equals sign or better
& && &&&if (sbiDecode &= EQUALS_SIGN_ENC) {
& && && & // An equals sign (for padding) must not occur at position 0 or 1
& && && & // and must be the last byte in the encoded value
& && && & if (sbiCrop == EQUALS_SIGN) {
& && && && &int bytesLeft = len -
& && && && &byte lastByte = (byte) (source[len - 1 + off] & 0x7f);
& && && && &if (b4Posn == 0 || b4Posn == 1) {
& && && && &&&throw new Base64DecoderException(
& && && && && && &&invalid padding byte '=' at byte offset & + i);
& && && && &} else if ((b4Posn == 3 && bytesLeft & 2)
& && && && && & || (b4Posn == 4 && bytesLeft & 1)) {
& && && && &&&throw new Base64DecoderException(
& && && && && && &&padding byte '=' falsely signals end of encoded value &
& && && && && && && & + &at offset & + i);
& && && && &} else if (lastByte != EQUALS_SIGN && lastByte != NEW_LINE) {
& && && && &&&throw new Base64DecoderException(
& && && && && && &&encoded value has invalid trailing byte&);
& && && && &}
& && && && &
& && && & }
& && && & b4[b4Posn++] = sbiC
& && && & if (b4Posn == 4) {
& && && && &outBuffPosn += decode4to3(b4, 0, outBuff, outBuffPosn, decodabet);
& && && && &b4Posn = 0;
& && && & }
& && &} else {
& && &&&throw new Base64DecoderException(&Bad Base64 input character at & + i
& && && && &+ &: & + source[i + off] + &(decimal)&);
& & // Because web safe encoding allows non padding base64 encodes, we
& & // need to pad the rest of the b4 buffer with equal signs when
& & // b4Posn != 0.&&There can be at most 2 equal signs at the end of
& & // four characters, so the b4 buffer must have two or three
& & // characters.&&This also catches the case where the input is
& & // padded with EQUALS_SIGN
& & if (b4Posn != 0) {
& && &if (b4Posn == 1) {
& && &&&throw new Base64DecoderException(&single trailing character at offset &
& && && && &+ (len - 1));
& && &b4[b4Posn++] = EQUALS_SIGN;
& && &outBuffPosn += decode4to3(b4, 0, outBuff, outBuffPosn, decodabet);
& & byte[] out = new byte[outBuffPosn];
& & System.arraycopy(outBuff, 0, out, 0, outBuffPosn);
CipherMode : CipherMode.CBC
PaddingMode : Padding.PKCS7
密钥:58B9B9268ACAEF64AC6A80B
明文:{&ts&:&01&,&code&:&R1&,&userno&:&&,&adult&:&1&}
加密:tHXFP2L/9SSG4lItCsj4VK1ZQlPFoBt3RlzAmEts1sc5cFLwKaGirWVUosWKtPNnZc1BllzqWKFu7ik2CMtRdeu93wlFRGaS0DyKp1eym+k=
我上面哪个地方错了,为什么加密出来的和c#加密出来的不一样啊?
求大神帮忙解答一下?
或者帮忙写一个这样的java解密,只要能解上面C#的就可以,拜托了。。。
本月Top10热心解答
以下通知在本月积极为他人答疑解惑。体现专业的技术素养,崇高的助人精神。感谢他们付出!
技术GG还在愁如何赚安币?不要说我没有告诉你们攻略哦~
安卓巴士每月都会举行博文大赛,第三期精彩博文集锦,大家快来观摩!
过往热门资讯,优质博文与源码汇集于此,徜徉其中,总会有所收获...
合作电话:
商务市场合作/投稿
问题反馈及帮助}

我要回帖

更多关于 求ps大神帮忙p图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信